|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24: /*
25: * Simple loadable kernel Handler example.
26: *
27: * This Handler accepts one message, setDevicePort(). This is how the
28: * user-level module, XXX, passes the device port obtained from Config
29: * down to a kernel-level IODevice.
30: */
31: #import <kernserv/kern_server_types.h>
32: #import <kernserv/printf.h>
33: #import <mach/mig_errors.h>
34: #import "myDevice.h"
35: #import "myHandlerHandler.h"
36: #import <driverkit/kernelDriver.h>
37: #import <driverkit/generalFuncs.h>
38:
39: kern_return_t setDevicePort(void *arg, port_t devicePort);
40: kern_return_t initDevice(void *arg);
41: kern_return_t shutDown(void *arg);
42:
43: static id myDeviceId;
44:
45: /*
46: * Create the struct used by mig-generated code to convert from
47: * message to setDevicePort() callout.
48: */
49: myHandler_t myHandlerStruct = {
50: 0,
51: 100,
52: setDevicePort,
53: initDevice,
54: shutDown
55: };
56:
57: /*
58: * Allocate an instance variable to be used by the kernel server interface
59: * routines for initializing and accessing this service.
60: */
61: kern_server_t myHandlerInstance;
62:
63: /*
64: * Stamp our arival.
65: */
66: void myHandlerInit(void)
67: {
68: printf("myHandler initialized\n");
69: }
70:
71: /*
72: * Notify the world that we're going away.
73: */
74: void myHandlerSignoff(void)
75: {
76: printf("myHandler unloaded\n");
77: }
78:
79: kern_return_t setDevicePort(
80: void *arg, // what's this?
81: port_t devicePort)
82: {
83: #if 0
84: port_t devicePortIOTask = convertPortToIOTask(devicePort);
85: #else 0
86: port_t devicePortIOTask = IOConvertPort(devicePort,
87: IO_CurrentTask, IO_KernelIOTask);
88: #endif 0
89: IOLog("myHandler setDevicePort: devicePort %d; %d in IOTask space\n",
90: devicePort, devicePortIOTask);
91: myDeviceId = [myDevice alloc];
92: [myDeviceId setDevicePort:devicePortIOTask];
93: return KERN_SUCCESS;
94: }
95:
96: kern_return_t initDevice(void *arg)
97: {
98: IOLog("myHandler initDevice\n");
99: [myDeviceId init];
100: return KERN_SUCCESS;
101: }
102:
103: kern_return_t shutDown(void *arg)
104: {
105: IOLog("myHandler shutDown\n");
106: [myDeviceId shutDown];
107: [myDevice free];
108: return KERN_SUCCESS;
109: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.