|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: *
24: * IOFWAddressSpace.h
25: *
26: * Classes which describe addresses in the local node which are accessable to other nodes
27: * via firewire asynchronous read/write/lock requests.
28: */
29: #ifndef _IOKIT_IOFWADDRESSSPACE_H
30: #define _IOKIT_IOFWADDRESSSPACE_H
31:
32: #include <IOKit/IOMemoryDescriptor.h>
33: #include <IOKit/firewire/IOFWRegs.h>
34:
35: class IOFireWireDevice;
36:
37: /*
38: * Callback called when a write request packet is received for
39: * a 'virtual' firewire address.
40: * device is the node originating the request
41: * addr is the address the device is requesting to write to
42: * len is the number of bytes to write
43: * buf contains the packet data
44: * lockWrite is true if the write is the write part of a lock request.
45: * return:
46: kFWResponseComplete = 0, // OK!
47: kFWResponseConflictError = 4, // Resource conflict, may retry
48: kFWResponseDataError = 5, // Data not available
49: kFWResponseTypeError = 6, // Operation not supported
50: kFWResponseAddressError = 7 // Address not valid in target device
51: */
52: typedef UInt32 (*FWWriteCallback)(void *refcon, UInt16 nodeID,
53: FWAddress addr, UInt32 len, const void *buf, bool lockWrite);
54:
55: /*
56: * Callback called when a read request packet is received for
57: * a 'virtual' firewire address.
58: * nodeID is the node originating the request
59: * addr is the address the device is requesting to write to
60: * len is the number of bytes to write
61: * buf contains the packet data
62: * lockRead is true if the read is the read part of a lock request.
63: * return:
64: kFWResponseComplete = 0, // OK!
65: kFWResponseConflictError = 4, // Resource conflict, may retry
66: kFWResponseDataError = 5, // Data not available
67: kFWResponseTypeError = 6, // Operation not supported
68: kFWResponseAddressError = 7 // Address not valid in target device
69: *
70: */
71: typedef UInt32 (*FWReadCallback)(void *refcon, UInt16 nodeID,
72: FWAddress addr, UInt32 len, IOMemoryDescriptor **buf,
73: IOByteCount * offset, bool lockRead);
74: /*
75: * Base class for FireWire address space objects
76: */
77: class IOFWAddressSpace : public OSObject
78: {
79: OSDeclareAbstractStructors(IOFWAddressSpace)
80:
81: public:
82: virtual UInt32 doRead(UInt16 nodeID, FWAddress addr, UInt32 len,
83: IOMemoryDescriptor **buf, IOByteCount * offset,
84: bool lockRead) = 0;
85: virtual UInt32 doWrite(UInt16 nodeID, FWAddress addr, UInt32 len,
86: const void *buf, bool lockWrite) = 0;
87: };
88:
89: /*
90: * Direct physical memory <-> FireWire address.
91: * Accesses to these addresses will be handled automatically by the
92: * hardware without notification.
93: *
94: * The 64 bit FireWire address of (32 bit) physical addr xxxx:xxxx is hostNode:0000:xxxx:xxxx
95: */
96: class IOFWPhysicalAddressSpace : public IOFWAddressSpace
97: {
98: OSDeclareDefaultStructors(IOFWPhysicalAddressSpace)
99:
100: protected:
101: IOMemoryDescriptor *fMem;
102: vm_size_t fLen;
103:
104: public:
105: virtual bool initWithDesc(IOMemoryDescriptor *mem);
106:
107: virtual UInt32 doRead(UInt16 nodeID, FWAddress addr, UInt32 len,
108: IOMemoryDescriptor **buf, IOByteCount * offset,
109: bool lockRead);
110: virtual UInt32 doWrite(UInt16 nodeID, FWAddress addr, UInt32 len,
111: const void *buf, bool lockWrite);
112: };
113:
114: /*
115: * Pseudo firewire addresses usually represent emulated registers of some kind.
116: * Accesses to these addresses will result in the owner being notified.
117: *
118: * Virtual addresses should not have zero as the top 16 bits of the 48 bit local address,
119: * since that may look like a physical address to hardware (eg. OHCI).
120: * if reader is NULL then reads will not be allowed.
121: * if writer is NULL then writes will not be allowed.
122: * if either is NULL then lock requests will not be allowed.
123: * refcon is passed back as the first argument of read and write callbacks.
124: */
125: class IOFWPseudoAddressSpace : public IOFWAddressSpace
126: {
127: OSDeclareDefaultStructors(IOFWPseudoAddressSpace)
128:
129: protected:
130: IOMemoryDescriptor* fDesc;
131: void * fRefCon;
132: FWReadCallback fReader;
133: FWWriteCallback fWriter;
134: FWAddress fBase;
135: UInt32 fLen;
136:
137: virtual void free();
138: static UInt32 simpleReader(void *refcon, UInt16 nodeID,
139: FWAddress addr, UInt32 len, IOMemoryDescriptor **buf, IOByteCount * offset,
140: bool lockRead);
141: static UInt32 simpleWriter(void *refcon, UInt16 nodeID,
142: FWAddress addr, UInt32 len, const void *buf, bool lockRead);
143:
144: public:
145: static IOFWPseudoAddressSpace * readWrite(FWAddress addr, UInt32 len,
146: FWReadCallback reader, FWWriteCallback writer, void *refcon);
147:
148: // make an address space object to handle read-only memory (eg. the local ROM)
149: // Handles everything itself
150: static IOFWPseudoAddressSpace * simpleRead(FWAddress addr, UInt32 len, const void *data);
151:
152: // make an address space object to handle r/w memory
153: // Handles everything itself
154: static IOFWPseudoAddressSpace * simpleRW(FWAddress addr, UInt32 len, void *data);
155:
156: virtual bool initAll(FWAddress addr, UInt32 len,
157: FWReadCallback reader, FWWriteCallback writer, void *refcon);
158:
159: virtual UInt32 doRead(UInt16 nodeID, FWAddress addr, UInt32 len,
160: IOMemoryDescriptor **buf, IOByteCount * offset,
161: bool lockRead);
162: virtual UInt32 doWrite(UInt16 nodeID, FWAddress addr, UInt32 len,
163: const void *buf, bool lockWrite);
164: };
165:
166: #endif /* _IOKIT_IOFWADDRESSSPACE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.