mac-rom/Toolbox/ExpansionBusMgr/ExpansionMgrInternal.h
Elliot Nunn 4325cdcc78 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-12-26 09:52:23 +08:00

155 lines
4.4 KiB
C

/*
File: ExpansionMgrInternal.h
Contains: xxx put contents here xxx
Written by: xxx put writers here xxx
Copyright: © 1993 by Apple Computer, Inc., all rights reserved.
Change History (most recent first):
<1> 11/11/93 fau first checked in
*/
/*
*
* Expansion Manager
* Device Tree Internal Data Structures
*
*/
#include "Types.h"
/*
* Device Tree Data Structures
*
*
* A Device Node:
*
* +---------------------------+
* | Node Attributes |
* +------+------+------+------+
* | Parent Node of this Node | <<-- Root nodes's parent is Nil
* +------+------+------+------+
* | Next Peer Device Node | <<-- Circular list of all peers
* +------+------+------+------+
* | Child Node List Head | <<-- Pointer to first Child, or Nil
* +------+------+------+------+
* | Child Node List Tail | <<-- Allocation hint for Children
* +------+------+------+------+
* | Property List Head | <<-- Pointer to first Property, or Nil
* +------+------+------+------+
* | Property List Tail | <<-- Allocation hint for Properties
* +------+------+------+------+-----------------+--+
* | Null-terminated Node Name (31 chrs max) |\0|
* +---------------------------------------------+--+
*
*/
typedef struct DeviceNode {
unsigned long attrib;
struct DeviceNode *parent;
struct DeviceNode *peer;
struct DeviceNode *childList;
struct DeviceNode *childTail;
struct PropertyNode *propertyList;
struct PropertyNode *propertyTail;
char name[32];
}DeviceNode;
typedef DeviceNode *DeviceNodePtr;
/*
*
* A Property Node:
*
* +------+------+------+------+
* | Node Attributes |
* +------+------+------+------+
* | Parent Node of this Prop |
* +------+------+------+------+
* | Next Peer Property | <<-- Circular list of all peers
* +------+------+------+------+
* | Property Size |
* +------+------+------+------+
* | Property Value Pointer |
* +------+------+------+------+------------------+--+
* | Null-terminated Property Name (31 chrs max) |\0|
* +----------------------------------------------+--+
*
*
* NOTE: attrib, parent, peer offsets must be kept the same relative to device
* nodes for this implementation.
*/
typedef struct PropertyNode {
unsigned long attrib;
struct DeviceNode *parent;
struct PropertyNode *peer;
unsigned long size;
unsigned char *dataPtr;
char name[32];
}PropertyNode;
typedef PropertyNode *PropertyNodePtr;
/*
* Node attributes:
* // User-visible NODE TYPES
* kDeviceNode // Node is a Device Node
* kPropertyNode // Node is a Property Node
*
* // User-visible NODE ATTRIBUTES
* kAttribLocked // Node cannot be changed or deleted
* kAttribNVRAM // Property saved in system NVRAM
* kAttribSysSav // Property saved in the system folder
*
* // Implementation private NODE ATTRIBUTES
* kAttribROMProp // Property data in ROM, val cannot be changed
* kAttribDefProp // Property data indirectly accessed
*/
#define kTypeMask 0x3
#define kDeviceNode 0x1
#define kPropertyNode 0x2
#define kAttribMask 0x70
#define kAttribLocked 0x10
#define kAttribNVRAM 0x20
#define kAttribSysSav 0x40
#define kAttribROMProp 0x80
#define kAttribDefProp 0x100
/*
* The device tree parameter block
*/
typedef unsigned long NodeID;
typedef struct NodeInfo {
unsigned long attrib; // attributes of this node
NodeID parentNode; // nil if node is root node
NodeID peerNode; // nil if no peers
NodeID childNode; // nil if no children
NodeID propertyNode; // device property nodes
NodeID propertySize; // size of property
char name[32]; // name of this node
}NodeInfo;
typedef NodeInfo *NodeInfoPtr;
/*
* Function Prototypes
*/
pascal NodeID DevTreeRoot();
pascal OSErr DevTreeNodeInfo(NodeID node, NodeInfoPtr p);
pascal NodeID DevTreeAddNode(NodeID parentNode, ulong attrib, char *name);
pascal OSErr DevTreeDelNode(NodeID theNode);
pascal OSErr DevTreeSetProperty(NodeID theNode, unsigned char *buf, long size);
pascal OSErr DevTreeGetProperty(NodeID theNode, unsigned char *buf, long size);