summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorveego <veego@NetBSD.org>2001-12-09 22:56:10 +0000
committerveego <veego@NetBSD.org>2001-12-09 22:56:10 +0000
commit9d39bbf3a8edf4a003d7b466cba114079ec99786 (patch)
tree976e7b8847bfcc940c80c672f2dac34686472991 /sys/dev
parentf36a75214ef5e7a4c485da7b78f26dc39faa02f8 (diff)
Support for dvd region code (RPC).
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/scsipi/cd.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/sys/dev/scsipi/cd.c b/sys/dev/scsipi/cd.c
index 8f9be59ce1c..af2002ca33f 100644
--- a/sys/dev/scsipi/cd.c
+++ b/sys/dev/scsipi/cd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cd.c,v 1.160 2001/11/15 09:48:16 lukem Exp $ */
+/* $NetBSD: cd.c,v 1.161 2001/12/09 22:56:10 veego Exp $ */
/*-
* Copyright (c) 1998, 2001 The NetBSD Foundation, Inc.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.160 2001/11/15 09:48:16 lukem Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.161 2001/12/09 22:56:10 veego Exp $");
#include "rnd.h"
@@ -1893,6 +1893,35 @@ dvd_auth(cd, a)
return (error);
return (0);
+ case DVD_LU_SEND_RPC_STATE:
+ cmd.opcode = GPCMD_REPORT_KEY;
+ cmd.bytes[8] = 8;
+ cmd.bytes[9] = 8 | (0 << 6);
+ error = scsipi_command(cd->sc_periph, &cmd, 12, buf, 8,
+ CDRETRIES, 30000, NULL,
+ XS_CTL_DATA_IN|XS_CTL_DATA_ONSTACK);
+ if (error)
+ return (error);
+ a->lrpcs.type = (buf[8] >> 6) & 3;
+ a->lrpcs.vra = (buf[8] >> 3) & 7;
+ a->lrpcs.ucca = (buf[8]) & 7;
+ a->lrpcs.region_mask = buf[9];
+ a->lrpcs.rpc_scheme = buf[10];
+ return (0);
+
+ case DVD_HOST_SEND_RPC_STATE:
+ cmd.opcode = GPCMD_SEND_KEY;
+ cmd.bytes[8] = 8;
+ cmd.bytes[9] = 6 | (0 << 6);
+ buf[1] = 6;
+ buf[4] = a->hrpcs.pdrc;
+ error = scsipi_command(cd->sc_periph, &cmd, 12, buf, 8,
+ CDRETRIES, 30000, NULL,
+ XS_CTL_DATA_OUT|XS_CTL_DATA_ONSTACK);
+ if (error)
+ return (error);
+ return (0);
+
default:
return (ENOTTY);
}