16 changed files with 73 additions and 1465 deletions
@ -1,372 +0,0 @@ |
|||
APPLE PUBLIC SOURCE LICENSE |
|||
Version 1.1 - April 19,1999 |
|||
|
|||
Please read this License carefully before downloading this software. |
|||
By downloading and using this software, you are agreeing to be bound |
|||
by the terms of this License. If you do not or cannot agree to the |
|||
terms of this License, please do not download or use the software. |
|||
|
|||
1. General; Definitions. This License applies to any program or other |
|||
work which Apple Computer, Inc. ("Apple") publicly announces as |
|||
subject to this Apple Public Source License and which contains a |
|||
notice placed by Apple identifying such program or work as "Original |
|||
Code" and stating that it is subject to the terms of this Apple Public |
|||
Source License version 1.1 (or subsequent version thereof), as it may |
|||
be revised from time to time by Apple ("License"). As used in this |
|||
License: |
|||
|
|||
1.1 "Affected Original Code" means only those specific portions of |
|||
Original Code that allegedly infringe upon any party's intellectual |
|||
property rights or are otherwise the subject of a claim of |
|||
infringement. |
|||
|
|||
1.2 "Applicable Patent Rights" mean: (a) in the case where Apple is |
|||
the grantor of rights, (i) claims of patents that are now or hereafter |
|||
acquired, owned by or assigned to Apple and (ii) that cover subject |
|||
matter contained in the Original Code, but only to the extent |
|||
necessary to use, reproduce and/or distribute the Original Code |
|||
without infringement; and (b) in the case where You are the grantor of |
|||
rights, (i) claims of patents that are now or hereafter acquired, |
|||
owned by or assigned to You and (ii) that cover subject matter in Your |
|||
Modifications, taken alone or in combination with Original Code. |
|||
|
|||
1.3 "Covered Code" means the Original Code, Modifications, the |
|||
combination of Original Code and any Modifications, and/or any |
|||
respective portions thereof. |
|||
|
|||
1.4 "Deploy" means to use, sublicense or distribute Covered Code other |
|||
than for Your internal research and development (R&D), and includes |
|||
without limitation, any and all internal use or distribution of |
|||
Covered Code within Your business or organization except for R&D use, |
|||
as well as direct or indirect sublicensing or distribution of Covered |
|||
Code by You to any third party in any form or manner. |
|||
|
|||
1.5 "Larger Work" means a work which combines Covered Code or portions |
|||
thereof with code not governed by the terms of this License. |
|||
|
|||
1.6 "Modifications" mean any addition to, deletion from, and/or change |
|||
to, the substance and/or structure of Covered Code. When code is |
|||
released as a series of files, a Modification is: (a) any addition to |
|||
or deletion from the contents of a file containing Covered Code; |
|||
and/or (b) any new file or other representation of computer program |
|||
statements that contains any part of Covered Code. |
|||
|
|||
1.7 "Original Code" means (a) the Source Code of a program or other |
|||
work as originally made available by Apple under this License, |
|||
including the Source Code of any updates or upgrades to such programs |
|||
or works made available by Apple under this License, and that has been |
|||
expressly identified by Apple as such in the header file(s) of such |
|||
work; and (b) the object code compiled from such Source Code and |
|||
originally made available by Apple under this License. |
|||
|
|||
1.8 "Source Code" means the human readable form of a program or other |
|||
work that is suitable for making modifications to it, including all |
|||
modules it contains, plus any associated interface definition files, |
|||
scripts used to control compilation and installation of an executable |
|||
(object code). |
|||
|
|||
1.9 "You" or "Your" means an individual or a legal entity exercising |
|||
rights under this License. For legal entities, "You" or "Your" |
|||
includes any entity which controls, is controlled by, or is under |
|||
common control with, You, where "control" means (a) the power, direct |
|||
or indirect, to cause the direction or management of such entity, |
|||
whether by contract or otherwise, or (b) ownership of fifty percent |
|||
(50%) or more of the outstanding shares or beneficial ownership of |
|||
such entity. |
|||
|
|||
2. Permitted Uses; Conditions & Restrictions. Subject to the terms |
|||
and conditions of this License, Apple hereby grants You, effective on |
|||
the date You accept this License and download the Original Code, a |
|||
world-wide, royalty-free, non- exclusive license, to the extent of |
|||
Apple's Applicable Patent Rights and copyrights covering the Original |
|||
Code, to do the following: |
|||
|
|||
2.1 You may use, copy, modify and distribute Original Code, with or |
|||
without Modifications, solely for Your internal research and |
|||
development, provided that You must in each instance: |
|||
|
|||
(a) retain and reproduce in all copies of Original Code the copyright |
|||
and other proprietary notices and disclaimers of Apple as they appear |
|||
in the Original Code, and keep intact all notices in the Original Code |
|||
that refer to this License; |
|||
|
|||
(b) include a copy of this License with every copy of Source Code of |
|||
Covered Code and documentation You distribute, and You may not offer |
|||
or impose any terms on such Source Code that alter or restrict this |
|||
License or the recipients' rights hereunder, except as permitted under |
|||
Section 6; and |
|||
|
|||
(c) completely and accurately document all Modifications that you have |
|||
made and the date of each such Modification, designate the version of |
|||
the Original Code you used, prominently include a file carrying such |
|||
information with the Modifications, and duplicate the notice in |
|||
Exhibit A in each file of the Source Code of all such Modifications. |
|||
|
|||
2.2 You may Deploy Covered Code, provided that You must in each |
|||
instance: |
|||
|
|||
(a) satisfy all the conditions of Section 2.1 with respect to the |
|||
Source Code of the Covered Code; |
|||
|
|||
(b) make all Your Deployed Modifications publicly available in Source |
|||
Code form via electronic distribution (e.g. download from a web site) |
|||
under the terms of this License and subject to the license grants set |
|||
forth in Section 3 below, and any additional terms You may choose to |
|||
offer under Section 6. You must continue to make the Source Code of |
|||
Your Deployed Modifications available for as long as you Deploy the |
|||
Covered Code or twelve (12) months from the date of initial |
|||
Deployment, whichever is longer; |
|||
|
|||
(c) if You Deploy Covered Code containing Modifications made by You, |
|||
inform others of how to obtain those Modifications by filling out and |
|||
submitting the information found at |
|||
http://www.apple.com/publicsource/modifications.html, if available; |
|||
and |
|||
|
|||
(d) if You Deploy Covered Code in object code, executable form only, |
|||
include a prominent notice, in the code itself as well as in related |
|||
documentation, stating that Source Code of the Covered Code is |
|||
available under the terms of this License with information on how and |
|||
where to obtain such Source Code. |
|||
|
|||
3. Your Grants. In consideration of, and as a condition to, the |
|||
licenses granted to You under this License: |
|||
|
|||
(a) You hereby grant to Apple and all third parties a non-exclusive, |
|||
royalty-free license, under Your Applicable Patent Rights and other |
|||
intellectual property rights owned or controlled by You, to use, |
|||
reproduce, modify, distribute and Deploy Your Modifications of the |
|||
same scope and extent as Apple's licenses under Sections 2.1 and 2.2; |
|||
and |
|||
|
|||
(b) You hereby grant to Apple and its subsidiaries a non-exclusive, |
|||
worldwide, royalty-free, perpetual and irrevocable license, under Your |
|||
Applicable Patent Rights and other intellectual property rights owned |
|||
or controlled by You, to use, reproduce, execute, compile, display, |
|||
perform, modify or have modified (for Apple and/or its subsidiaries), |
|||
sublicense and distribute Your Modifications, in any form, through |
|||
multiple tiers of distribution. |
|||
|
|||
4. Larger Works. You may create a Larger Work by combining Covered |
|||
Code with other code not governed by the terms of this License and |
|||
distribute the Larger Work as a single product. In each such |
|||
instance, You must make sure the requirements of this License are |
|||
fulfilled for the Covered Code or any portion thereof. |
|||
|
|||
5. Limitations on Patent License. Except as expressly stated in |
|||
Section 2, no other patent rights, express or implied, are granted by |
|||
Apple herein. Modifications and/or Larger Works may require |
|||
additional patent licenses from Apple which Apple may grant in its |
|||
sole discretion. |
|||
|
|||
6. Additional Terms. You may choose to offer, and to charge a fee |
|||
for, warranty, support, indemnity or liability obligations and/or |
|||
other rights consistent with the scope of the license granted herein |
|||
("Additional Terms") to one or more recipients of Covered |
|||
Code. However, You may do so only on Your own behalf and as Your sole |
|||
responsibility, and not on behalf of Apple. You must obtain the |
|||
recipient's agreement that any such Additional Terms are offered by |
|||
You alone, and You hereby agree to indemnify, defend and hold Apple |
|||
harmless for any liability incurred by or claims asserted against |
|||
Apple by reason of any such Additional Terms. |
|||
|
|||
7. Versions of the License. Apple may publish revised and/or new |
|||
versions of this License from time to time. Each version will be |
|||
given a distinguishing version number. Once Original Code has been |
|||
published under a particular version of this License, You may continue |
|||
to use it under the terms of that version. You may also choose to use |
|||
such Original Code under the terms of any subsequent version of this |
|||
License published by Apple. No one other than Apple has the right to |
|||
modify the terms applicable to Covered Code created under this |
|||
License. |
|||
|
|||
8. NO WARRANTY OR SUPPORT. The Original Code may contain in whole or |
|||
in part pre-release, untested, or not fully tested works. The |
|||
Original Code may contain errors that could cause failures or loss of |
|||
data, and may be incomplete or contain inaccuracies. You expressly |
|||
acknowledge and agree that use of the Original Code, or any portion |
|||
thereof, is at Your sole and entire risk. THE ORIGINAL CODE IS |
|||
PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND |
|||
AND APPLE AND APPLE'S LICENSOR(S) (FOR THE PURPOSES OF SECTIONS 8 AND |
|||
9, APPLE AND APPLE'S LICENSOR(S) ARE COLLECTIVELY REFERRED TO AS |
|||
"APPLE") EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS |
|||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|||
AND/OR CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY |
|||
RIGHTS. APPLE DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE |
|||
ORIGINAL CODE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF |
|||
THE ORIGINAL CODE WILL BE UNINTERRUPTED OR ERROR- FREE, OR THAT |
|||
DEFECTS IN THE ORIGINAL CODE WILL BE CORRECTED. NO ORAL OR WRITTEN |
|||
INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED |
|||
REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE |
|||
SCOPE OF THIS WARRANTY. You acknowledge that the Original Code is not |
|||
intended for use in the operation of nuclear facilities, aircraft |
|||
navigation, communication systems, or air traffic control machines in |
|||
which case the failure of the Original Code could lead to death, |
|||
personal injury, or severe physical or environmental damage. |
|||
|
|||
9. Liability. |
|||
|
|||
9.1 Infringement. If any portion of, or functionality implemented by, |
|||
the Original Code becomes the subject of a claim of infringement, |
|||
Apple may, at its option: (a) attempt to procure the rights necessary |
|||
for Apple and You to continue using the Affected Original Code; (b) |
|||
modify the Affected Original Code so that it is no longer infringing; |
|||
or (c) suspend Your rights to use, reproduce, modify, sublicense and |
|||
distribute the Affected Original Code until a final determination of |
|||
the claim is made by a court or governmental administrative agency of |
|||
competent jurisdiction and Apple lifts the suspension as set forth |
|||
below. Such suspension of rights will be effective immediately upon |
|||
Apple's posting of a notice to such effect on the Apple web site that |
|||
is used for implementation of this License. Upon such final |
|||
determination being made, if Apple is legally able, without the |
|||
payment of a fee or royalty, to resume use, reproduction, |
|||
modification, sublicensing and distribution of the Affected Original |
|||
Code, Apple will lift the suspension of rights to the Affected |
|||
Original Code by posting a notice to such effect on the Apple web site |
|||
that is used for implementation of this License. If Apple suspends |
|||
Your rights to Affected Original Code, nothing in this License shall |
|||
be construed to restrict You, at Your option and subject to applicable |
|||
law, from replacing the Affected Original Code with non-infringing |
|||
code or independently negotiating for necessary rights from such third |
|||
party. |
|||
|
|||
9.2 LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES SHALL APPLE BE |
|||
LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES |
|||
ARISING OUT OF OR RELATING TO THIS LICENSE OR YOUR USE OR INABILITY TO |
|||
USE THE ORIGINAL CODE, OR ANY PORTION THEREOF, WHETHER UNDER A THEORY |
|||
OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY |
|||
OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF |
|||
SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF |
|||
ANY REMEDY. In no event shall Apple's total liability to You for all |
|||
damages under this License exceed the amount of fifty dollars |
|||
($50.00). |
|||
|
|||
10. Trademarks. This License does not grant any rights to use the |
|||
trademarks or trade names "Apple", "Apple Computer", "Mac OS X", "Mac |
|||
OS X Server" or any other trademarks or trade names belonging to Apple |
|||
(collectively "Apple Marks") and no Apple Marks may be used to endorse |
|||
or promote products derived from the Original Code other than as |
|||
permitted by and in strict compliance at all times with Apple's third |
|||
party trademark usage guidelines which are posted at |
|||
http://www.apple.com/legal/guidelinesfor3rdparties.html. |
|||
|
|||
11. Ownership. Apple retains all rights, title and interest in and to |
|||
the Original Code and any Modifications made by or on behalf of Apple |
|||
("Apple Modifications"), and such Apple Modifications will not be |
|||
automatically subject to this License. Apple may, at its sole |
|||
discretion, choose to license such Apple Modifications under this |
|||
License, or on different terms from those contained in this License or |
|||
may choose not to license them at all. Apple's development, use, |
|||
reproduction, modification, sublicensing and distribution of Covered |
|||
Code will not be subject to this License. |
|||
|
|||
12. Termination. |
|||
|
|||
12.1 Termination. This License and the rights granted hereunder will |
|||
terminate: |
|||
|
|||
(a) automatically without notice from Apple if You fail to comply with |
|||
any term(s) of this License and fail to cure such breach within 30 |
|||
days of becoming aware of such breach; (b) immediately in the event of |
|||
the circumstances described in Section 13.5(b); or (c) automatically |
|||
without notice from Apple if You, at any time during the term of this |
|||
License, commence an action for patent infringement against Apple. |
|||
|
|||
12.2 Effect of Termination. Upon termination, You agree to |
|||
immediately stop any further use, reproduction, modification, |
|||
sublicensing and distribution of the Covered Code and to destroy all |
|||
copies of the Covered Code that are in your possession or control. |
|||
All sublicenses to the Covered Code which have been properly granted |
|||
prior to termination shall survive any termination of this License. |
|||
Provisions which, by their nature, should remain in effect beyond the |
|||
termination of this License shall survive, including but not limited |
|||
to Sections 3, 5, 8, 9, 10, 11, 12.2 and 13. Neither party will be |
|||
liable to the other for compensation, indemnity or damages of any sort |
|||
solely as a result of terminating this License in accordance with its |
|||
terms, and termination of this License will be without prejudice to |
|||
any other right or remedy of either party. |
|||
|
|||
13. Miscellaneous. |
|||
|
|||
13.1 Government End Users. The Covered Code is a "commercial item" as |
|||
defined in FAR 2.101. Government software and technical data rights |
|||
in the Covered Code include only those rights customarily provided to |
|||
the public as defined in this License. This customary commercial |
|||
license in technical data and software is provided in accordance with |
|||
FAR 12.211 (Technical Data) and 12.212 (Computer Software) and, for |
|||
Department of Defense purchases, DFAR 252.227-7015 (Technical Data -- |
|||
Commercial Items) and 227.7202-3 (Rights in Commercial Computer |
|||
Software or Computer Software Documentation). Accordingly, all U.S. |
|||
Government End Users acquire Covered Code with only those rights set |
|||
forth herein. |
|||
|
|||
13.2 Relationship of Parties. This License will not be construed as |
|||
creating an agency, partnership, joint venture or any other form of |
|||
legal association between You and Apple, and You will not represent to |
|||
the contrary, whether expressly, by implication, appearance or |
|||
otherwise. |
|||
|
|||
13.3 Independent Development. Nothing in this License will impair |
|||
Apple's right to acquire, license, develop, have others develop for |
|||
it, market and/or distribute technology or products that perform the |
|||
same or similar functions as, or otherwise compete with, |
|||
Modifications, Larger Works, technology or products that You may |
|||
develop, produce, market or distribute. |
|||
|
|||
13.4 Waiver; Construction. Failure by Apple to enforce any provision |
|||
of this License will not be deemed a waiver of future enforcement of |
|||
that or any other provision. Any law or regulation which provides |
|||
that the language of a contract shall be construed against the drafter |
|||
will not apply to this License. |
|||
|
|||
13.5 Severability. (a) If for any reason a court of competent |
|||
jurisdiction finds any provision of this License, or portion thereof, |
|||
to be unenforceable, that provision of the License will be enforced to |
|||
the maximum extent permissible so as to effect the economic benefits |
|||
and intent of the parties, and the remainder of this License will |
|||
continue in full force and effect. (b) Notwithstanding the foregoing, |
|||
if applicable law prohibits or restricts You from fully and/or |
|||
specifically complying with Sections 2 and/or 3 or prevents the |
|||
enforceability of either of those Sections, this License will |
|||
immediately terminate and You must immediately discontinue any use of |
|||
the Covered Code and destroy all copies of it that are in your |
|||
possession or control. |
|||
|
|||
13.6 Dispute Resolution. Any litigation or other dispute resolution |
|||
between You and Apple relating to this License shall take place in the |
|||
Northern District of California, and You and Apple hereby consent to |
|||
the personal jurisdiction of, and venue in, the state and federal |
|||
courts within that District with respect to this License. The |
|||
application of the United Nations Convention on Contracts for the |
|||
International Sale of Goods is expressly excluded. |
|||
|
|||
13.7 Entire Agreement; Governing Law. This License constitutes the |
|||
entire agreement between the parties with respect to the subject |
|||
matter hereof. This License shall be governed by the laws of the |
|||
United States and the State of California, except that body of |
|||
California law concerning conflicts of law. |
|||
|
|||
Where You are located in the province of Quebec, Canada, the following |
|||
clause applies: The parties hereby confirm that they have requested |
|||
that this License and all related documents be drafted in English. Les |
|||
parties ont exige que le present contrat et tous les documents |
|||
connexes soient rediges en anglais. |
|||
|
|||
EXHIBIT A. |
|||
|
|||
"Portions Copyright (c) 1999-2000 Apple Computer, Inc. All Rights |
|||
Reserved. This file contains Original Code and/or Modifications of |
|||
Original Code as defined in and that are subject to the Apple Public |
|||
Source License Version 1.1 (the "License"). You may not use this file |
|||
except in compliance with the License. Please obtain a copy of the |
|||
License at http://www.apple.com/publicsource and read it before using |
|||
this file. |
|||
|
|||
The Original Code and all software distributed under the License are |
|||
distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
|||
EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
|||
INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the |
|||
License for the specific language governing rights and limitations |
|||
under the License." |
|||
@ -1,690 +0,0 @@ |
|||
/*****************************************************************************
|
|||
* DVDioctl.cpp: Linux-like DVD driver for Darwin and MacOS X |
|||
***************************************************************************** |
|||
* Copyright (C) 1998-2000 Apple Computer, Inc. All rights reserved. |
|||
* Copyright (C) 2001 VideoLAN |
|||
* $Id: DVDioctl.cpp,v 1.7 2001/06/25 11:34:08 sam Exp $ |
|||
* |
|||
* Authors: Samuel Hocevar <sam@zoy.org> |
|||
* Eugenio Jarosiewicz <ej0@cise.ufl.edu> |
|||
* |
|||
* The contents of this file constitute Original Code as defined in and |
|||
* are subject to the Apple Public Source License Version 1.1 (the |
|||
* "License"). You may not use this file except in compliance with the |
|||
* License. Please obtain a copy of the License at |
|||
* http://www.apple.com/publicsource and read it before using this file.
|
|||
* |
|||
* This Original Code and all software distributed under the License are |
|||
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
|||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
|||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
|||
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the |
|||
* License for the specific language governing rights and limitations |
|||
* under the License. |
|||
*****************************************************************************/ |
|||
|
|||
/*****************************************************************************
|
|||
* TODO: |
|||
* - add a timeout to waitForService() so that we don't wait forever |
|||
* - find a way to prevent user from ejecting DVD using the GUI while |
|||
* it is still in use |
|||
*****************************************************************************/ |
|||
|
|||
/*****************************************************************************
|
|||
* Preamble |
|||
*****************************************************************************/ |
|||
extern "C" |
|||
{ |
|||
#include <sys/param.h> |
|||
#include <sys/conf.h> |
|||
#include <sys/syslog.h> |
|||
#include <sys/systm.h> |
|||
#include <sys/ioccom.h> |
|||
#include <sys/fcntl.h> |
|||
#include <sys/buf.h> |
|||
#include <sys/uio.h> |
|||
#include <miscfs/devfs/devfs.h> |
|||
|
|||
#include <mach/mach_types.h> |
|||
} |
|||
|
|||
#include <IOKit/IOLib.h> |
|||
#include <IOKit/IOService.h> |
|||
#include <IOKit/storage/IOMedia.h> |
|||
#include <IOKit/storage/IODVDMedia.h> |
|||
#include <IOKit/storage/IODVDBlockStorageDriver.h> |
|||
|
|||
#undef CONTROL //some include above #defines this and breaks the next include...grr.
|
|||
#include <IOKit/scsi-commands/IOSCSIMultimediaCommandsDevice.h> |
|||
#include <IOKit/scsi-commands/IODVDServices.h> |
|||
|
|||
#include "DVDioctl.h" |
|||
|
|||
/*****************************************************************************
|
|||
* Driver class |
|||
*****************************************************************************/ |
|||
class DVDioctl : public IOService |
|||
{ |
|||
OSDeclareDefaultStructors( DVDioctl ) |
|||
|
|||
public: |
|||
|
|||
virtual bool init ( OSDictionary *dictionary = 0 ); |
|||
virtual IOService *probe ( IOService *provider, SInt32 *score ); |
|||
virtual bool start ( IOService *provider ); |
|||
virtual void stop ( IOService *provider ); |
|||
virtual void free ( void ); |
|||
}; |
|||
|
|||
#define super IOService |
|||
OSDefineMetaClassAndStructors( DVDioctl, IOService ) |
|||
|
|||
/*****************************************************************************
|
|||
* Variable typedefs |
|||
*****************************************************************************/ |
|||
typedef enum { DKRTYPE_BUF, DKRTYPE_DIO } dkrtype_t; |
|||
typedef struct dio { dev_t dev; struct uio * uio; } dio_t; |
|||
typedef struct buf buf_t; |
|||
typedef void * dkr_t; |
|||
|
|||
/*****************************************************************************
|
|||
* Local prototypes |
|||
*****************************************************************************/ |
|||
static int DVDClose ( dev_t, int, int, struct proc * ); |
|||
static int DVDBlockIoctl ( dev_t, u_long, caddr_t, int, struct proc * ); |
|||
static int DVDOpen ( dev_t, int, int, struct proc * ); |
|||
static int DVDSize ( dev_t ); |
|||
static void DVDStrategy ( buf_t * ); |
|||
static int DVDReadWrite ( dkr_t, dkrtype_t ); |
|||
static void DVDReadWriteCompletion( void *, void *, IOReturn, UInt64 ); |
|||
|
|||
static struct bdevsw device_functions = |
|||
{ |
|||
DVDOpen, DVDClose, DVDStrategy, DVDBlockIoctl, eno_dump, DVDSize, D_DISK |
|||
}; |
|||
|
|||
/*****************************************************************************
|
|||
* Local variables |
|||
*****************************************************************************/ |
|||
static DVDioctl * p_this = NULL; |
|||
|
|||
static bool b_inuse; |
|||
static int i_major; |
|||
static void *p_node; |
|||
static IODVDMedia *p_dvd; |
|||
static IODVDBlockStorageDriver *p_drive; |
|||
static IODVDServices *p_services; |
|||
static IOSCSIMultimediaCommandsDevice *p_scsi_mcd; |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_GET_DEV: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline dev_t DKR_GET_DEV(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
return (dkrtype == DKRTYPE_BUF) |
|||
? ((buf_t *)dkr)->b_dev : ((dio_t *)dkr)->dev; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_GET_BYTE_COUNT: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline UInt64 DKR_GET_BYTE_COUNT(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
return (dkrtype == DKRTYPE_BUF) |
|||
? ((buf_t *)dkr)->b_bcount : ((dio_t *)dkr)->uio->uio_resid; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_GET_BYTE_START: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline UInt64 DKR_GET_BYTE_START(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
if (dkrtype == DKRTYPE_BUF) |
|||
{ |
|||
buf_t * bp = (buf_t *)dkr; |
|||
return bp->b_blkno * p_dvd->getPreferredBlockSize(); |
|||
} |
|||
return ((dio_t *)dkr)->uio->uio_offset; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_IS_READ: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline bool DKR_IS_READ(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
return (dkrtype == DKRTYPE_BUF) |
|||
? ((((buf_t *)dkr)->b_flags & B_READ) == B_READ) |
|||
: ((((dio_t *)dkr)->uio->uio_rw) == UIO_READ); |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_IS_ASYNCHRONOUS: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline bool DKR_IS_ASYNCHRONOUS(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
return (dkrtype == DKRTYPE_BUF) ? true : false; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_IS_RAW: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline bool DKR_IS_RAW(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
return (dkrtype == DKRTYPE_BUF) ? false : true; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_SET_BYTE_COUNT: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline void DKR_SET_BYTE_COUNT(dkr_t dkr, dkrtype_t dkrtype, UInt64 bcount) |
|||
{ |
|||
if (dkrtype == DKRTYPE_BUF) |
|||
{ |
|||
((buf_t *)dkr)->b_resid = ((buf_t *)dkr)->b_bcount - bcount; |
|||
} |
|||
else |
|||
{ |
|||
((dio_t *)dkr)->uio->uio_resid -= bcount; |
|||
} |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_RUN_COMPLETION: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline void DKR_RUN_COMPLETION(dkr_t dkr, dkrtype_t dkrtype, IOReturn status) |
|||
{ |
|||
if (dkrtype == DKRTYPE_BUF) |
|||
{ |
|||
buf_t * bp = (buf_t *)dkr; |
|||
|
|||
bp->b_error = p_this->errnoFromReturn(status); |
|||
bp->b_flags |= (status != kIOReturnSuccess) ? B_ERROR : 0; |
|||
biodone(bp); |
|||
} |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DKR_GET_BUFFER: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static inline IOMemoryDescriptor * DKR_GET_BUFFER(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
if (dkrtype == DKRTYPE_BUF) |
|||
{ |
|||
buf_t * bp = (buf_t *)dkr; |
|||
|
|||
if ( (bp->b_flags & B_VECTORLIST) ) |
|||
{ |
|||
assert(sizeof(IOPhysicalRange ) == sizeof(iovec )); |
|||
assert(sizeof(IOPhysicalRange::address) == sizeof(iovec::iov_base)); |
|||
assert(sizeof(IOPhysicalRange::length ) == sizeof(iovec::iov_len )); |
|||
return IOMemoryDescriptor::withPhysicalRanges( |
|||
(IOPhysicalRange *) bp->b_vectorlist, |
|||
(UInt32) bp->b_vectorcount, |
|||
(bp->b_flags & B_READ) ? kIODirectionIn : kIODirectionOut, |
|||
true ); |
|||
} |
|||
|
|||
return IOMemoryDescriptor::withAddress( |
|||
(vm_address_t) bp->b_data, |
|||
(vm_size_t) bp->b_bcount, |
|||
(bp->b_flags & B_READ) ? kIODirectionIn : kIODirectionOut, |
|||
(bp->b_flags & B_PHYS) ? current_task() : kernel_task ); |
|||
} |
|||
else |
|||
{ |
|||
struct uio * uio = ((dio_t *)dkr)->uio; |
|||
|
|||
assert(sizeof(IOVirtualRange ) == sizeof(iovec )); |
|||
assert(sizeof(IOVirtualRange::address) == sizeof(iovec::iov_base)); |
|||
assert(sizeof(IOVirtualRange::length ) == sizeof(iovec::iov_len )); |
|||
|
|||
return IOMemoryDescriptor::withRanges( |
|||
(IOVirtualRange *) uio->uio_iov, |
|||
(UInt32) uio->uio_iovcnt, |
|||
(uio->uio_rw == UIO_READ ) ? kIODirectionIn : kIODirectionOut, |
|||
(uio->uio_segflg != UIO_SYSSPACE) ? current_task() : kernel_task, |
|||
true ); |
|||
} |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDioctl::init: initialize the driver structure |
|||
*****************************************************************************/ |
|||
bool DVDioctl::init( OSDictionary *p_dict = 0 ) |
|||
{ |
|||
//IOLog( "DVD ioctl: initializing\n" );
|
|||
|
|||
p_this = this; |
|||
|
|||
p_node = NULL; |
|||
p_dvd = NULL; |
|||
p_drive = NULL; |
|||
p_services = NULL; |
|||
p_scsi_mcd = NULL; |
|||
i_major = -1; |
|||
b_inuse = false; |
|||
|
|||
bool res = super::init( p_dict ); |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDioctl::probe: check whether the driver can be safely activated |
|||
*****************************************************************************/ |
|||
IOService * DVDioctl::probe( IOService *provider, SInt32 *score ) |
|||
{ |
|||
//IOLog( "DVD ioctl: probing\n" );
|
|||
IOService * res = super::probe( provider, score ); |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDioctl::start: start the driver |
|||
*****************************************************************************/ |
|||
bool DVDioctl::start( IOService *provider ) |
|||
{ |
|||
//IOLog( "DVD ioctl: starting\n" );
|
|||
|
|||
if( !super::start( provider ) ) |
|||
{ |
|||
return false; |
|||
} |
|||
|
|||
//IOLog( "DVD ioctl: creating device\n" );
|
|||
|
|||
i_major = bdevsw_add( -1, &device_functions ); |
|||
|
|||
if( i_major == -1 ) |
|||
{ |
|||
//log(LOG_INFO, "DVD ioctl: failed to allocate a major number\n");
|
|||
return false; |
|||
} |
|||
|
|||
p_node = devfs_make_node ( makedev( i_major, 0 ), DEVFS_BLOCK, |
|||
UID_ROOT, GID_WHEEL, 0666, "dvd" ); |
|||
|
|||
if( p_node == NULL ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: failed creating node\n" );
|
|||
|
|||
if( bdevsw_remove(i_major, &device_functions) == -1 ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: bdevsw_remove failed\n" );
|
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
return true; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDioctl::stop: stop the driver |
|||
*****************************************************************************/ |
|||
void DVDioctl::stop( IOService *provider ) |
|||
{ |
|||
//IOLog( "DVD ioctl: removing device\n" );
|
|||
|
|||
if( p_node != NULL ) |
|||
{ |
|||
devfs_remove( p_node ); |
|||
} |
|||
|
|||
if( i_major != -1 ) |
|||
{ |
|||
if( bdevsw_remove(i_major, &device_functions) == -1 ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: bdevsw_remove failed\n" );
|
|||
} |
|||
} |
|||
|
|||
//IOLog( "DVD ioctl: stopping\n" );
|
|||
super::stop( provider ); |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDioctl::free: free all resources allocated by the driver |
|||
*****************************************************************************/ |
|||
void DVDioctl::free( void ) |
|||
{ |
|||
//IOLog( "DVD ioctl: freeing\n" );
|
|||
super::free( ); |
|||
} |
|||
|
|||
/* following functions are local */ |
|||
|
|||
/*****************************************************************************
|
|||
* DVDOpen: look for an IODVDMedia object and open it |
|||
*****************************************************************************/ |
|||
static int DVDOpen( dev_t dev, int flags, int devtype, struct proc * ) |
|||
{ |
|||
IOStorageAccess level; |
|||
|
|||
/* Check that the device hasn't already been opened */ |
|||
if( b_inuse ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: already opened\n" );
|
|||
return EBUSY; |
|||
} |
|||
else |
|||
{ |
|||
b_inuse = true; |
|||
} |
|||
|
|||
IOService * p_root = IOService::getServiceRoot(); |
|||
|
|||
if( p_root == NULL ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: couldn't find root\n" );
|
|||
b_inuse = false; |
|||
return ENXIO; |
|||
} |
|||
|
|||
OSDictionary * p_dict = p_root->serviceMatching( kIODVDMediaClass ); |
|||
|
|||
if( p_dict == NULL ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: couldn't find dictionary\n" );
|
|||
b_inuse = false; |
|||
return ENXIO; |
|||
} |
|||
|
|||
p_dvd = OSDynamicCast( IODVDMedia, p_root->waitForService( p_dict ) ); |
|||
|
|||
if( p_dvd == NULL ) |
|||
{ |
|||
//log( LOG_INFO, "DVD ioctl: couldn't find service\n" );
|
|||
b_inuse = false; |
|||
return ENXIO; |
|||
} |
|||
|
|||
//log( LOG_INFO, "DVD ioctl: found DVD\n" );
|
|||
|
|||
level = (flags & FWRITE) ? kIOStorageAccessReaderWriter |
|||
: kIOStorageAccessReader; |
|||
|
|||
if( ! p_dvd->open( p_this, 0, level) ) |
|||
{ |
|||
log( LOG_INFO, "DVD ioctl: IODVDMedia object busy\n" ); |
|||
b_inuse = false; |
|||
return EBUSY; |
|||
} |
|||
|
|||
p_drive = p_dvd->getProvider(); |
|||
|
|||
p_services = OSDynamicCast( IODVDServices, p_drive->getProvider() ); |
|||
|
|||
p_scsi_mcd = OSDynamicCast( IOSCSIMultimediaCommandsDevice, p_services->getProvider() ); |
|||
|
|||
log( LOG_INFO, "DVD ioctl: IODVDMedia->open()\n" ); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDClose: close the IODVDMedia object |
|||
*****************************************************************************/ |
|||
static int DVDClose( dev_t dev, int flags, int devtype, struct proc * ) |
|||
{ |
|||
/* Release the device */ |
|||
p_dvd->close( p_this ); |
|||
|
|||
p_dvd = NULL; |
|||
p_drive = NULL; |
|||
p_services = NULL; |
|||
p_scsi_mcd = NULL; |
|||
b_inuse = false; |
|||
|
|||
log( LOG_INFO, "DVD ioctl: IODVDMedia->close()\n" ); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDSize: return the device size |
|||
*****************************************************************************/ |
|||
static int DVDSize( dev_t dev ) |
|||
{ |
|||
return p_dvd->getPreferredBlockSize(); |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDStrategy: perform read or write operations |
|||
*****************************************************************************/ |
|||
static void DVDStrategy( buf_t * bp ) |
|||
{ |
|||
DVDReadWrite(bp, DKRTYPE_BUF); |
|||
return; |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDBlockIoctl: issue an ioctl on the block device |
|||
*****************************************************************************/ |
|||
static int DVDBlockIoctl( dev_t dev, u_long cmd, caddr_t addr, int flags, |
|||
struct proc *p ) |
|||
{ |
|||
#define p_data (((dvdioctl_data_t *)addr)) |
|||
IOReturn i_ret = EINVAL; |
|||
|
|||
/* Only needed for IODVD_READ_STRUCTURE */ |
|||
SCSITask *p_request; |
|||
SCSIServiceResponse response; |
|||
|
|||
IOMemoryDescriptor *p_mem; |
|||
|
|||
p_mem = IOMemoryDescriptor::withAddress( p_data->p_buffer, |
|||
p_data->i_size, |
|||
kIODirectionOutIn ); |
|||
|
|||
switch( cmd ) |
|||
{ |
|||
case IODVD_READ_STRUCTURE: |
|||
|
|||
log( LOG_INFO, "DVD ioctl: IODVD_READ_STRUCTURE\n" ); |
|||
|
|||
i_ret = kIOReturnUnsupported; |
|||
response = kSCSIServiceResponse_SERVICE_DELIVERY_OR_TARGET_FAILURE; |
|||
|
|||
/* HACK! - Make GetSCSITask and friends in /System/Library/Frameworks/Kernel.framework/Versions/A/Headers/IOKit/scsi-commands/IOSCSIPrimaryCommandsDevice.h public by moving public: from line 96 to line 79 (as root). It's only a compile time check - not a link time thing, so it should be ok. */ |
|||
p_request = p_scsi_mcd->GetSCSITask( ); |
|||
|
|||
if ( p_scsi_mcd->READ_DVD_STRUCTURE ( p_request, |
|||
p_mem, |
|||
p_data->i_lba, |
|||
0,//?LAYER_NUMBER
|
|||
p_data->i_keyformat, |
|||
p_mem->getLength(),//p_data->i_size ?
|
|||
p_data->i_agid, |
|||
0x00 //?CONTROL
|
|||
) == true ) |
|||
{ |
|||
/* The command was successfully built, now send it */ |
|||
response = p_scsi_mcd->SendCommand( p_request ); |
|||
} |
|||
else |
|||
{ |
|||
#if 0 |
|||
exit -1; |
|||
PANIC_NOW(( "IOSCSIMultimediaCommandsDevice:: " |
|||
"readDVDstruct malformed command" )); |
|||
#endif |
|||
} |
|||
|
|||
if( ( response == kSCSIServiceResponse_TASK_COMPLETE ) && |
|||
( p_request->GetTaskStatus ( ) == kSCSITaskStatus_GOOD ) ) |
|||
{ |
|||
i_ret = kIOReturnSuccess; |
|||
} |
|||
else |
|||
{ |
|||
i_ret = kIOReturnError; |
|||
} |
|||
|
|||
p_scsi_mcd->ReleaseSCSITask( p_request ); |
|||
|
|||
} |
|||
|
|||
break; |
|||
|
|||
case IODVD_SEND_KEY: |
|||
|
|||
log( LOG_INFO, "DVD ioctl: send key to `%s', " |
|||
"buf %d, class %d, lba N/A, agid %d, format %d\n", |
|||
p_drive->getDeviceTypeName(), |
|||
(int)p_data->p_buffer, p_data->i_keyclass, |
|||
p_data->i_agid, p_data->i_keyformat ); |
|||
|
|||
i_ret = p_drive->sendKey( p_mem, (DVDKeyClass)p_data->i_keyclass, |
|||
p_data->i_agid, |
|||
(DVDKeyFormat)p_data->i_keyformat ); |
|||
|
|||
break; |
|||
|
|||
case IODVD_REPORT_KEY: |
|||
|
|||
log( LOG_INFO, "DVD ioctl: report key from `%s', " |
|||
"buf %d, class %d, lba %d, agid %d, format %d\n", |
|||
p_drive->getDeviceTypeName(), |
|||
(int)p_data->p_buffer, p_data->i_keyclass, p_data->i_lba, |
|||
p_data->i_agid, p_data->i_keyformat ); |
|||
|
|||
i_ret = p_drive->reportKey( p_mem, (DVDKeyClass)p_data->i_keyclass, |
|||
p_data->i_lba, p_data->i_agid, |
|||
(DVDKeyFormat)p_data->i_keyformat ); |
|||
|
|||
break; |
|||
|
|||
default: |
|||
|
|||
log( LOG_INFO, "DVD ioctl: unknown ioctl\n" ); |
|||
|
|||
i_ret = EINVAL; |
|||
|
|||
break; |
|||
} |
|||
|
|||
return i_ret; |
|||
#undef p_data |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDReadWrite: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static int DVDReadWrite(dkr_t dkr, dkrtype_t dkrtype) |
|||
{ |
|||
IOMemoryDescriptor * buffer; |
|||
register UInt64 byteCount; |
|||
register UInt64 byteStart; |
|||
UInt64 mediaSize; |
|||
IOReturn status; |
|||
|
|||
byteCount = DKR_GET_BYTE_COUNT(dkr, dkrtype); |
|||
byteStart = DKR_GET_BYTE_START(dkr, dkrtype); |
|||
mediaSize = p_dvd->getSize(); |
|||
|
|||
if ( byteStart >= mediaSize ) |
|||
{ |
|||
status = DKR_IS_READ(dkr,dkrtype) ? kIOReturnSuccess : kIOReturnIOError; goto dkreadwriteErr; |
|||
} |
|||
|
|||
if ( DKR_IS_RAW(dkr, dkrtype) ) |
|||
{ |
|||
UInt64 mediaBlockSize = p_dvd->getPreferredBlockSize(); |
|||
|
|||
if ( (byteStart % mediaBlockSize) || (byteCount % mediaBlockSize) ) |
|||
{ |
|||
status = kIOReturnNotAligned; |
|||
goto dkreadwriteErr; |
|||
} |
|||
} |
|||
|
|||
buffer = DKR_GET_BUFFER(dkr, dkrtype); |
|||
|
|||
if ( buffer == 0 ) |
|||
{ |
|||
status = kIOReturnNoMemory; |
|||
goto dkreadwriteErr; |
|||
} |
|||
|
|||
if ( byteCount > mediaSize - byteStart ) |
|||
{ |
|||
IOMemoryDescriptor * originalBuffer = buffer; |
|||
|
|||
buffer = IOMemoryDescriptor::withSubRange( originalBuffer, 0, |
|||
mediaSize - byteStart, originalBuffer->getDirection() ); |
|||
originalBuffer->release(); |
|||
if ( buffer == 0 ) |
|||
{ |
|||
status = kIOReturnNoMemory; |
|||
goto dkreadwriteErr; |
|||
} |
|||
} |
|||
|
|||
if ( DKR_IS_ASYNCHRONOUS(dkr, dkrtype) ) |
|||
{ |
|||
IOStorageCompletion completion; |
|||
|
|||
completion.target = dkr; |
|||
completion.action = DVDReadWriteCompletion; |
|||
completion.parameter = (void *) dkrtype; |
|||
|
|||
if ( DKR_IS_READ(dkr, dkrtype) ) |
|||
{ |
|||
p_dvd->read( p_this, byteStart, buffer, completion ); |
|||
} |
|||
else |
|||
{ |
|||
p_dvd->write( p_this, byteStart, buffer, completion ); |
|||
} |
|||
|
|||
status = kIOReturnSuccess; |
|||
} |
|||
else |
|||
{ |
|||
if ( DKR_IS_READ(dkr, dkrtype) ) |
|||
{ |
|||
status = p_dvd->IOStorage::read( p_this, byteStart, |
|||
buffer, &byteCount ); |
|||
} |
|||
else |
|||
{ |
|||
status = p_dvd->IOStorage::write( p_this, byteStart, |
|||
buffer, &byteCount ); |
|||
} |
|||
|
|||
DVDReadWriteCompletion(dkr, (void *)dkrtype, status, byteCount); |
|||
} |
|||
|
|||
buffer->release(); |
|||
return p_this->errnoFromReturn(status); |
|||
dkreadwriteErr: |
|||
|
|||
DVDReadWriteCompletion(dkr, (void *)dkrtype, status, 0); |
|||
|
|||
return p_this->errnoFromReturn(status); |
|||
} |
|||
|
|||
/*****************************************************************************
|
|||
* DVDReadWriteCompletion: borrowed from IOMediaBSDClient.cpp |
|||
*****************************************************************************/ |
|||
static void DVDReadWriteCompletion( void * target, |
|||
void * parameter, |
|||
IOReturn status, |
|||
UInt64 actualByteCount ) |
|||
{ |
|||
dkr_t dkr = (dkr_t) target; |
|||
dkrtype_t dkrtype = (dkrtype_t) (int) parameter; |
|||
dev_t dev = DKR_GET_DEV(dkr, dkrtype); |
|||
|
|||
if ( status != kIOReturnSuccess ) |
|||
{ |
|||
IOLog( "DVD ioctl: %s (is the disc authenticated ?)\n", |
|||
p_this->stringFromReturn(status) ); |
|||
} |
|||
|
|||
DKR_SET_BYTE_COUNT(dkr, dkrtype, actualByteCount); |
|||
DKR_RUN_COMPLETION(dkr, dkrtype, status); |
|||
} |
|||
|
|||
@ -1,72 +0,0 @@ |
|||
/*****************************************************************************
|
|||
* DVDioctl.h: Linux-like DVD driver for Darwin and MacOS X |
|||
***************************************************************************** |
|||
* Copyright (C) 2001 VideoLAN |
|||
* $Id: DVDioctl.h,v 1.4 2001/06/25 11:34:08 sam Exp $ |
|||
* |
|||
* Authors: Samuel Hocevar <sam@zoy.org> |
|||
* Eugenio Jarosiewicz <ej0@cise.ufl.edu> |
|||
* |
|||
* The contents of this file constitute Original Code as defined in and |
|||
* are subject to the Apple Public Source License Version 1.1 (the |
|||
* "License"). You may not use this file except in compliance with the |
|||
* License. Please obtain a copy of the License at |
|||
* http://www.apple.com/publicsource and read it before using this file.
|
|||
* |
|||
* This Original Code and all software distributed under the License are |
|||
* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
|||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, |
|||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, |
|||
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the |
|||
* License for the specific language governing rights and limitations |
|||
* under the License. |
|||
*****************************************************************************/ |
|||
|
|||
#if defined(KERNEL) |
|||
/* Everything has already been defined */ |
|||
#else |
|||
enum DVDKeyFormat |
|||
{ |
|||
kCSSAGID = 0x00, |
|||
kChallengeKey = 0x01, |
|||
kKey1 = 0x02, |
|||
kKey2 = 0x03, |
|||
kTitleKey = 0x04, |
|||
kASF = 0x05, |
|||
kSetRegion = 0x06, |
|||
kRPCState = 0x08, |
|||
kCSS2AGID = 0x10, |
|||
kCPRMAGID = 0x11, |
|||
kInvalidateAGID = 0x3f |
|||
}; |
|||
|
|||
enum DVDKeyClass |
|||
{ |
|||
kCSS_CSS2_CPRM = 0x00, |
|||
kRSSA = 0x01 |
|||
}; |
|||
#endif |
|||
|
|||
typedef struct dvdioctl_data |
|||
{ |
|||
void *p_buffer; |
|||
|
|||
#if defined(KERNEL) |
|||
UInt32 i_size; |
|||
UInt32 i_lba; |
|||
UInt8 i_agid; |
|||
#else |
|||
u32 i_size; |
|||
u32 i_lba; |
|||
u8 i_agid; |
|||
#endif |
|||
|
|||
int i_keyclass; |
|||
int i_keyformat; |
|||
|
|||
} dvdioctl_data_t; |
|||
|
|||
#define IODVD_READ_STRUCTURE _IOWR('B', 1, dvdioctl_data_t) |
|||
#define IODVD_SEND_KEY _IOWR('B', 2, dvdioctl_data_t) |
|||
#define IODVD_REPORT_KEY _IOWR('B', 3, dvdioctl_data_t) |
|||
|
|||
@ -1,274 +0,0 @@ |
|||
// !$*UTF8*$! |
|||
{ |
|||
archiveVersion = 1; |
|||
classes = { |
|||
}; |
|||
objectVersion = 32; |
|||
objects = { |
|||
06AA1264FFB2107B11CA28AA = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
); |
|||
generatedFileNames = ( |
|||
); |
|||
isa = PBXShellScriptBuildPhase; |
|||
name = "Shell Script"; |
|||
neededFileNames = ( |
|||
); |
|||
shellPath = /bin/sh; |
|||
shellScript = "script=\"${SYSTEM_DEVELOPER_DIR}/ProjectBuilder Extras/Kernel Extension Support/KEXTPostprocess\";\nif [ -x \"$script\" ]; then\n . \"$script\"\nfi"; |
|||
}; |
|||
06AA1265FFB2107B11CA28AA = { |
|||
buildRules = ( |
|||
); |
|||
buildSettings = { |
|||
COPY_PHASE_STRIP = NO; |
|||
}; |
|||
isa = PBXBuildStyle; |
|||
name = Development; |
|||
}; |
|||
06AA1266FFB2107B11CA28AA = { |
|||
buildRules = ( |
|||
); |
|||
buildSettings = { |
|||
COPY_PHASE_STRIP = YES; |
|||
}; |
|||
isa = PBXBuildStyle; |
|||
name = Deployment; |
|||
}; |
|||
06AA1267FFB2110C11CA28AA = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
); |
|||
generatedFileNames = ( |
|||
); |
|||
isa = PBXShellScriptBuildPhase; |
|||
name = "Shell Script"; |
|||
neededFileNames = ( |
|||
); |
|||
shellPath = /bin/sh; |
|||
shellScript = "script=\"${SYSTEM_DEVELOPER_DIR}/ProjectBuilder Extras/Kernel Extension Support/KEXTPreprocess\";\nif [ -x \"$script\" ]; then\n . \"$script\"\nfi"; |
|||
}; |
|||
089C1669FE841209C02AAC07 = { |
|||
buildStyles = ( |
|||
06AA1265FFB2107B11CA28AA, |
|||
06AA1266FFB2107B11CA28AA, |
|||
); |
|||
isa = PBXProject; |
|||
mainGroup = 089C166AFE841209C02AAC07; |
|||
projectDirPath = .; |
|||
targets = ( |
|||
089C1673FE841209C02AAC07, |
|||
); |
|||
}; |
|||
089C166AFE841209C02AAC07 = { |
|||
children = ( |
|||
247142CAFF3F8F9811CA285C, |
|||
089C167CFE841241C02AAC07, |
|||
19C28FB6FE9D52B211CA2CBB, |
|||
); |
|||
isa = PBXGroup; |
|||
name = DVDioctl; |
|||
refType = 4; |
|||
}; |
|||
089C1673FE841209C02AAC07 = { |
|||
buildPhases = ( |
|||
06AA1267FFB2110C11CA28AA, |
|||
089C1674FE841209C02AAC07, |
|||
089C1675FE841209C02AAC07, |
|||
089C1676FE841209C02AAC07, |
|||
089C1677FE841209C02AAC07, |
|||
089C1679FE841209C02AAC07, |
|||
06AA1264FFB2107B11CA28AA, |
|||
); |
|||
buildSettings = { |
|||
FRAMEWORK_SEARCH_PATHS = ""; |
|||
HEADER_SEARCH_PATHS = ""; |
|||
INSTALL_PATH = "$(SYSTEM_LIBRARY_DIR)/Extensions"; |
|||
KERNEL_MODULE = YES; |
|||
LIBRARY_SEARCH_PATHS = ""; |
|||
MODULE_IOKIT = YES; |
|||
MODULE_NAME = DVDioctl; |
|||
MODULE_VERSION = 1.0.0d1; |
|||
OPTIMIZATION_CFLAGS = ""; |
|||
OTHER_CFLAGS = ""; |
|||
OTHER_LDFLAGS = ""; |
|||
OTHER_REZFLAGS = ""; |
|||
PRODUCT_NAME = DVDioctl; |
|||
SECTORDER_FLAGS = ""; |
|||
WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; |
|||
WRAPPER_EXTENSION = kext; |
|||
}; |
|||
conditionalBuildSettings = { |
|||
}; |
|||
dependencies = ( |
|||
); |
|||
isa = PBXBundleTarget; |
|||
name = DVDioctl; |
|||
productInstallPath = "$(SYSTEM_LIBRARY_DIR)/Extensions"; |
|||
productName = DVDioctl; |
|||
productReference = 0B81C263FFB7832611CA28AA; |
|||
productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> |
|||
<!DOCTYPE plist SYSTEM \"file://localhost/System/Library/DTDs/PropertyList.dtd\"> |
|||
<plist version=\"0.9\"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>English</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>DVDioctl</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string></string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>DVDioctl</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>KEXT</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>1.0.0</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>1.0.0d1</string> |
|||
<key>IOKitPersonalities</key> |
|||
<dict> |
|||
<key>DVDioctl</key> |
|||
<dict> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>DVDioctl</string> |
|||
<key>IOClass</key> |
|||
<string>DVDioctl</string> |
|||
<key>IOKitDebug</key> |
|||
<integer>65535</integer> |
|||
<key>IOMatchCategory</key> |
|||
<string>DVDioctl</string> |
|||
<key>IOProviderClass</key> |
|||
<string>IOResources</string> |
|||
<key>IOResourceMatch</key> |
|||
<string>IOKit</string> |
|||
</dict> |
|||
</dict> |
|||
<key>OSBundleLibraries</key> |
|||
<dict/> |
|||
</dict> |
|||
</plist> |
|||
"; |
|||
shouldUseHeadermap = 1; |
|||
}; |
|||
089C1674FE841209C02AAC07 = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
1A224C40FF42367911CA2CB7, |
|||
); |
|||
isa = PBXHeadersBuildPhase; |
|||
name = Headers; |
|||
}; |
|||
089C1675FE841209C02AAC07 = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
089C1680FE841241C02AAC07, |
|||
); |
|||
isa = PBXResourcesBuildPhase; |
|||
name = "Bundle Resources"; |
|||
}; |
|||
089C1676FE841209C02AAC07 = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
1A224C41FF42367911CA2CB7, |
|||
); |
|||
isa = PBXSourcesBuildPhase; |
|||
name = Sources; |
|||
}; |
|||
089C1677FE841209C02AAC07 = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
); |
|||
isa = PBXFrameworksBuildPhase; |
|||
name = "Frameworks & Libraries"; |
|||
}; |
|||
089C1679FE841209C02AAC07 = { |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
); |
|||
isa = PBXRezBuildPhase; |
|||
name = "ResourceManager Resources"; |
|||
}; |
|||
089C167CFE841241C02AAC07 = { |
|||
children = ( |
|||
089C167DFE841241C02AAC07, |
|||
); |
|||
isa = PBXGroup; |
|||
name = Resources; |
|||
refType = 4; |
|||
}; |
|||
089C167DFE841241C02AAC07 = { |
|||
children = ( |
|||
089C167EFE841241C02AAC07, |
|||
); |
|||
isa = PBXVariantGroup; |
|||
name = InfoPlist.strings; |
|||
refType = 4; |
|||
}; |
|||
089C167EFE841241C02AAC07 = { |
|||
fileEncoding = 10; |
|||
isa = PBXFileReference; |
|||
name = English; |
|||
path = English.lproj/InfoPlist.strings; |
|||
refType = 4; |
|||
}; |
|||
089C1680FE841241C02AAC07 = { |
|||
fileRef = 089C167DFE841241C02AAC07; |
|||
isa = PBXBuildFile; |
|||
settings = { |
|||
}; |
|||
}; |
|||
0B81C263FFB7832611CA28AA = { |
|||
isa = PBXBundleReference; |
|||
path = DVDioctl.kext; |
|||
refType = 3; |
|||
}; |
|||
19C28FB6FE9D52B211CA2CBB = { |
|||
children = ( |
|||
0B81C263FFB7832611CA28AA, |
|||
); |
|||
isa = PBXGroup; |
|||
name = Products; |
|||
refType = 4; |
|||
}; |
|||
1A224C3EFF42367911CA2CB7 = { |
|||
isa = PBXFileReference; |
|||
path = DVDioctl.h; |
|||
refType = 4; |
|||
}; |
|||
1A224C3FFF42367911CA2CB7 = { |
|||
isa = PBXFileReference; |
|||
path = DVDioctl.cpp; |
|||
refType = 4; |
|||
}; |
|||
1A224C40FF42367911CA2CB7 = { |
|||
fileRef = 1A224C3EFF42367911CA2CB7; |
|||
isa = PBXBuildFile; |
|||
settings = { |
|||
}; |
|||
}; |
|||
1A224C41FF42367911CA2CB7 = { |
|||
fileRef = 1A224C3FFF42367911CA2CB7; |
|||
isa = PBXBuildFile; |
|||
settings = { |
|||
ATTRIBUTES = ( |
|||
); |
|||
}; |
|||
}; |
|||
247142CAFF3F8F9811CA285C = { |
|||
children = ( |
|||
1A224C3EFF42367911CA2CB7, |
|||
1A224C3FFF42367911CA2CB7, |
|||
); |
|||
isa = PBXGroup; |
|||
name = Source; |
|||
path = ""; |
|||
refType = 4; |
|||
}; |
|||
}; |
|||
rootObject = 089C1669FE841209C02AAC07; |
|||
} |
|||
Binary file not shown.
@ -1,31 +0,0 @@ |
|||
|
|||
DVD driver for Darwin and Mac OS X |
|||
================================== |
|||
|
|||
This experimental kernel extension (KEXT) for Darwin is a wrapper for |
|||
the DVD-related kernel IOKit functions. It was written for two main reasons: |
|||
|
|||
- the lack of userland support for DVD key negociation functions |
|||
- the fact that the kernel locks mounted device, preventing raw device |
|||
reads if the DVD is mounted |
|||
|
|||
Building the driver |
|||
=================== |
|||
|
|||
You can either load the project in Project Builder and press the "build" |
|||
icon, or open a terminal window and type "pbxbuild". |
|||
|
|||
Installing the driver |
|||
===================== |
|||
|
|||
Open a terminal window, and type "kextload build/DVDioctl.kext", or whatever |
|||
the path to the build tree is. You need to be root in order to do this. |
|||
|
|||
Using the driver |
|||
================ |
|||
|
|||
The driver creates a special /dev/dvd block device upon loading. When a |
|||
process tries to open this device, it looks for an IODVDMedia object and |
|||
opens it. All further operation done to the /dev/dvd device are then |
|||
forwarded to the IODVDMedia device. |
|||
|
|||
Loading…
Reference in new issue