sys7.1-doc-wip/Toolbox/ExpansionBusMgr/ExpansionMgrInternal.h
2019-07-27 22:37:48 +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);