DIRECTORY Rope; Mach: CEDAR DEFINITIONS ~ BEGIN MachCall: SIGNAL [errorCode: msgReturnT, explanation: Rope.ROPE]; MachAnomaly: SIGNAL [explanation: Rope.ROPE]; kernReturnT: TYPE = INT32; KernSuccess: INT = 0; KernInvalidAddress: INT = 1; KernProtectionFailure: INT = 2; KernNoSpace: INT = 3; KernInvalidArgument: INT = 4; KernFailure: INT = 5; KernResourceShortage: INT = 6; KernNotReceiver: INT = 7; KernNoAccess: INT = 8; MsgSizeMax: INT = 8192; msgSizeT: TYPE = CARD32; msgOptionT: TYPE = CARD32; msgHeaderT: TYPE = MACHINE DEPENDENT RECORD [ filler8(0:0..15): CARD16 _ 0, filler16(1:0..7): BYTE _ 0, msgSimple(1:8..15): BYTE _ 0, msgSize(2): msgSizeT, msgType(4): INT, msgLocalPort(6): portT, msgRemotePort(8): portT, msgId(10): INT ]; msgTypeT: TYPE = MACHINE DEPENDENT RECORD [ msgTypeName(0:0..7): BYTE _ 0, msgTypeSize(0:8..15): BYTE _ 0, msgTypeNumber(0:16..27): CARD [0..4096) _ 0, msgTypeInline(0:28..28): BOOL _ FALSE, msgTypeLongform(0:29..29): BOOL _ FALSE, msgTypeDeallocate(0:30..30): BOOL _ FALSE, msgTypeFiller1(0:31..31): BOOL _ FALSE ]; msgTypeLongT: TYPE = MACHINE DEPENDENT RECORD [ msgTypeHeader(0): msgTypeT, msgTypeLongName(2:0..15): CARD16, msgTypeLongSize(3:0..15): CARD16, msgTypeLongNumber(4): CARD32 ]; notificationT: TYPE = MACHINE DEPENDENT RECORD [ notifyHeader(0): msgHeaderT, notifyType(12): msgTypeT, notifyPort(14): portT ]; deathPillT: TYPE = MACHINE DEPENDENT RECORD [ Head(0): msgHeaderT, RetCodeType(12): msgTypeT, RetCode(14): kernReturnT ]; msgReturnT: TYPE = INT; MsgTypeUnstructured: INT = 0; MsgTypeBit: INT = 0; MsgTypeBoolean: INT = 0; MsgTypeInteger16: INT = 1; MsgTypeInteger32: INT = 2; MsgTypePortOwnership: INT = 3; MsgTypePortReceive: INT = 4; MsgTypePortAll: INT = 5; MsgTypePort: INT = 6; MsgTypeChar: INT = 8; MsgTypeByte: INT = 9; MsgTypeInteger8: INT = 9; MsgTypeReal: INT = 10; MsgTypeString: INT = 12; MsgTypeStringC: INT = 12; MsgTypeInvalid: INT = 13; -- Used by the kernel to mark invalid data MsgOptionNone: INT = 0000H; -- Terminate only when message op works SendTimeout: INT = 0001H; -- Terminate on timeout elapsed SendNotify: INT = 0002H; -- Terminate with reply message if need be SendInterrupt: INT = 0004H; -- Terminate on software interrupt SendAlways: INT = 0008H; -- KERNEL only: never block SendKernel: INT = 0010H; -- KERNEL only: kernel is originator RcvTimeout: INT = 0100H; -- Terminate on timeout elapsed RcvNoSenders: INT = 0200H; -- Terminate if I'm the only sender left RcvInterrupt: INT = 0400H; -- Terminate on software interrupt SendSuccess: INT = 0; SendErrorsStart: INT = -100; SendInvalidMemory: INT = -101; -- Message structure or out-of-line data invalid SendInvalidPort: INT = -102; -- Reference to inacessible port SendTimedOut: INT = -103; -- Terminated due to timeout SendWillNotify: INT = -105; -- Last message accepted until notification sent SendNotifyInProgress: INT = -106; -- Already awaiting a notification SendKernelRefused: INT = -107; -- Message to the kernel refused SendInterrupted: INT = -108; -- Software interrupt during send SendMsgTooLarge: INT = -109; -- Message specified was too large SendMsgTooSmall: INT = -110; -- Data specified exceeds message size SendMsgSizeChange: INT = -111; -- Message size changed while being copied RcvErrorsStart: INT = -200; RcvInvalidMemory: INT = -201; RCVInvalidPort: INT = -202; RcvTimedOut: INT = -203; RcvTooLarge: INT = -204; -- Message structure too small to hold data RcvNotEnoughMemory: INT = -205; -- Unable to find address space to put out-of-line data RcvOnlySender: INT = -206; -- Receiver/owner are only remaining senders RcvInterrupted: INT = -207; RcvPortChange: INT = -208; -- Port receiver changed, or port became enabled NotifyFirst: INT = 0100B; NotifyPortDeleted: INT = NotifyFirst + 001; NotifyMsgAccepted: INT = NotifyFirst + 002; NotifyOwnershipRights: INT = NotifyFirst + 003; NotifyReceiveRights: INT = NotifyFirst + 004; NotifyLast: INT = NotifyFirst + 015B; MigTypeError: INT = -300; -- Type check failure MigReplyMismatch: INT = -301; -- Wrong return message ID MigRemoteError: INT = -302; -- Server detected error MigBadId: INT = -303; -- Bad message ID MigBadArguments: INT = -304; -- Server found wrong arguments MigNoReply: INT = -305; -- Server shouldn't reply MigException: INT = -306; -- Server raised exception MigArrayTooLarge: INT = -307; -- User specified array not large enough to hold returned array portT: TYPE = RECORD [portNumber: INT32]; portArrayT: TYPE = POINTER TO portT; ListOfPorts: TYPE = LIST OF portT; taskT: TYPE = portT; vmTaskT: TYPE = taskT; threadT: TYPE = portT; vmOffsetT: TYPE = CARD32; vmSizeT: TYPE = CARD32; vmAddressT: TYPE = vmOffsetT; pointerT: TYPE = vmOffsetT; pagingObjectT: TYPE = portT; caddrT: TYPE = POINTER TO CHAR; netnameNameT: TYPE = ARRAY[0..80) OF CHAR; PortNull: portT = [0]; PortEnabled: portT = [-1]; PortDefault: portT = [-1]; PortInvalid: portT = [-2]; MachPortsSlotsUsed: INT = 3; taskSelf: PROC RETURNS [targetTask: taskT]; taskNotify: PROC RETURNS [notifyPort: portT]; taskData: PROC RETURNS [dataPort: portT]; vmAllocate: PROC [targetTask: vmTaskT, address: vmAddressT, size: vmSizeT, anywhere: BOOL, raiseSignal: BOOL] RETURNS [mappedAddress: vmAddressT, kernCode: kernReturnT]; vmAllocateWithPager: PROC [targetTask: vmTaskT, address: vmAddressT, size: vmSizeT, anywhere: BOOL, pagingObject: pagingObjectT, offset: vmOffsetT, raiseSignal: BOOL] RETURNS [mappedAddress: vmAddressT, kernCode: kernReturnT]; vmDeallocate: PROC [targetTask: vmTaskT, address: vmAddressT, size: vmSizeT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; msgSend: PROC [header: REF msgHeaderT, option: msgOptionT, timeout: INT, raiseSignal: BOOL] RETURNS [msgCode: msgReturnT]; msgReceive: PROC [header: REF msgHeaderT, option: msgOptionT, timeout: INT, raiseSignal: BOOL] RETURNS [msgCode: msgReturnT]; msgRPC: PROC [header: REF msgHeaderT, option: msgOptionT, rcvSize: INT, sendTimeout: INT, rcvTimeout: INT, raiseSignal: BOOL] RETURNS [msgCode: msgReturnT]; nameServerPort: PROC RETURNS [portT]; environmentPort: PROC RETURNS [portT]; servicePort: PROC RETURNS [portT]; MachPortsLookup: PROC [targetTask: taskT, raiseSignal: BOOL] RETURNS [intPortSet: portArrayT, intPortArrayCount: INT, kernCode: kernReturnT]; portAllocate: PROC [targetTask: taskT, raiseSignal: BOOL] RETURNS [newPort: portT, kernCode: kernReturnT]; portDeallocate: PROC [targetTask: taskT, localPort: portT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; portRestrict: PROC [targetTask: taskT, port: portT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; portUnrestrict: PROC [targetTask: taskT, port: portT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; portMessages: PROC [targetTask: taskT, ports: portArrayT, portsCount: POINTER TO INT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; portStatus: PROC [targetTask: taskT, myPort: portT, raiseSignal: BOOL] RETURNS [unrestricted: BOOL, numMsgs: INT, backlog: INT, owner: BOOL, receiver: BOOL, kernCode: kernReturnT]; portSetBacklog: PROC [targetTask: taskT, myPort: portT, backlog: INT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; netnameCheckIn: PROC [ServPort: portT, portName: Rope.ROPE, signature: portT, portId: portT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; netnameLookUp: PROC [ServPort: portT, hostName: Rope.ROPE, portName: Rope.ROPE, raiseSignal: BOOL] RETURNS [portId: portT, kernCode: kernReturnT]; netnameCheckOut: PROC [ServPort: portT, portName: Rope.ROPE, signature: portT, raiseSignal: BOOL] RETURNS [kernCode: kernReturnT]; END. Mach.mesa Copyright Σ 1988 by Xerox Corporation. All rights reserved. Bob Hagmann October 18, 1988 7:04:52 am PDT This interface is to Mach. Kernel error Kernel return codes Message data types Known values for the msg_type_name field. The only types known to the Mach kernel are the port types, and those types used in the kernel RPC interface. Options to IPC primitives. These can be combined by or'ing; the combination RPC call uses both SEND_ and RCV_ options at once. Send codes. Common data types Some port constants Tasks get my task (task_self and current_task) get my notify port (task_notify) get my data port (task_data) Virtual Memory Grab some VM. Map some externally backed memory into VM. Unmap some externally backed memory into VM, whether externally backed or not. Messages send a message Receive a message. Modifies the header! "Hybrid call which performs a msgSend followed by a msgReceive, using the same message buffer." Ports get my port to the name server (name_server_port) get my port to the environment (environment_port) get my port to the service port (service_port) Lookup the list of well known ports "causes a port to be created for the specified taks" "requests that the target task's access to a port be relinquished" restricts port so that msgReceive must be used the port number, not PortDefault unrestricts port so that PortDefault to msgReceive can receive from this port unrestricts port so that PortDefault to msgReceive can receive from this port unrestricts port so that PortDefault to msgReceive can receive from this port unrestricts port so that PortDefault to msgReceive can receive from this port Netname "check in a name into the local name space" "check in a name into the local name space" "check in a name into the local name space" Κ …˜code•Mark outsideHeaderšœ ™ Kšœ<™JšŸ œœ ‘˜9JšŸœœ ‘0˜MJšŸœœ ‘#˜FJšŸœœ ‘ ˜@JšŸœœ ‘!˜?JšŸœœ ‘"˜@JšŸœœ ‘&˜DJšŸœœ ‘*˜JJ˜JšŸœœ˜JšŸœœ˜JšŸœœ˜JšŸ œœ ˜JšŸ œœ ‘+˜FJšŸœœ ‘7˜XJšŸ œœ ‘,˜IJšŸœœ ˜JšŸ œœ ‘0˜MJ˜JšŸ œœ ˜JšŸœœ˜-JšŸœœ˜,JšŸœœ˜0JšŸœœ˜.JšŸ œœ˜'J˜Jšœœ ˜1Jšœœ$˜9Jšœœ"˜5Jšœ œ˜)Jšœœ*˜>Jšœ œ$˜3Jšœœ%˜6JšœœI˜^J˜—šœ™Kšœœœœ˜)Kšœ œœœ˜$Kšœ œœœ˜"Kšœœ ˜Kšœ œ ˜Kšœ œ ˜Kšœ œœ˜Kšœ œœ˜Kšœ œ ˜Kšœ œ ˜Kšœœ ˜Kš œœœœœ˜Kš œœœœœ˜*—™K˜K˜K˜K˜K˜KšŸœœ˜—™š œ œ˜,Kšœ(™(K™—š  œ œ˜-K™ K™—š œœœ˜)K™K™——™š   œœEœœœ4˜©Kšœ œ™ K™—š  œœEœ?œœ4˜βKšœ'œ™*K™—š  œœHœœ˜€KšœN™N——™š  œœ œ*œ œœ˜zKšœ™K™—š   œœ œ*œ œœ˜}Kšœ™Kšœ™K™—š œœ œ*œœœ œœ˜œKšœΟoœ’ œ!™_——™š œœœ ˜%Kšœ2™2K™—š œœœ ˜&Kšœ2™2K™—š  œœœ ˜"Kšœ/™/K™—š Ÿœœ"œœ-œ˜K™#K™—š  œœ"œœ)˜jK™4K™—š œœ4œœ˜nK™BK™—š  œœ/œœ˜gK™OK™—š œœ/œœ˜iK™MK™—š  œœ4œœœœœ˜‰K™MK™—š  œœ1œœœ œ œ œ œ˜΄K™MK™—š  œœ-œœœ˜yK™M——™š  œœ"œ0œœ˜K™+K™—š   œœ"œœœœ(˜’K™+K™—š  œœ"œ!œœ˜‚K™+K™——Kšœ˜—…—Θ/k