1 .\" $NetBSD: pdc.4,v 1.5 2009/03/22 14:29:34 perry Exp $
3 .\" $OpenBSD: pdc.4,v 1.6 2007/06/01 19:54:10 aanriot Exp $
5 .\" Copyright (c) 2004 Michael Shalayeff
6 .\" All rights reserved.
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\" notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\" notice, this list of conditions and the following disclaimer in the
15 .\" documentation and/or other materials provided with the distribution.
17 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 .\" IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
21 .\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 .\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23 .\" SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
25 .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
26 .\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27 .\" THE POSSIBILITY OF SUCH DAMAGE.
34 .Nd Processor-Dependent Code firmware driver
36 .Cd "pdc0 at mainbus?"
40 driver provides system console services through the PDC
41 and also a means for calling PDC procedures, described later.
42 The PDC console is used early in the kernel startup before enough kernel
43 subsystems have been initialized to directly use the hardware
44 i.e. serial ports, keyboard, and video.
46 The PDC version displayed at system boot is relevant to the particular
47 system model and is not necessarily comparable to PDC versions
49 .\" TODO page0 description and entry points
51 PDC procedure calls are all made through a single entry point
52 and assume normal C language calling conventions, with option
53 number in the first argument and the return data address in the
54 second, unless indicated otherwise.
55 Each call requires at most 7KB of the available stack.
56 Here is the list of procedures and options descriptions:
58 .It Fn pdc "PDC_ADD_VALID" "PDC_ADD_VALID_DFLT" "paddr"
59 Perform a read operation attempt at the physical address
61 without causing a HPMC, in order to verify that the address is valid
62 and there is a device to respond to it.
63 The implementation may choose to call the caller's HPMC handler and
64 raise error conditions on the bus convertors.
65 .It Fn pdc "PDC_ALLOC" "PDC_ALLOC_DFLT" "ptr" "size"
66 Allocate static storage for IODC use of
68 bytes and return the address in a word pointed to by the
71 There is no way of freeing the storage allocated and thus
72 care shall be taken to not exhaust the total allocation limit of 32KB.
73 .It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_DEFAULT" "ptr"
74 Get block TLB parameters into the data area pointed to by the
77 This includes minimal and maximal entry size and number of fixed and
78 variable sized entries in the block TLB.
79 Fixed entries have size of power of two and are aligned to the size
80 where variable entries can have any size and base address both
82 .It Fn pdc PDC_BLOCK_TLB PDC_BTLB_INSERT sp va pa len acc slot
83 Insert block TLB entry specified by the space ID
95 .It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_PURGE" "sp" "va" "slot" "len"
96 Purge one entry from the block TLB specified by the space ID
104 .It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_PURGE_ALL"
105 Purge all entries from the block TLB.
106 .\" TODO .It Fn pdc "PDC_BUS_BAD" "PDC_BUS_BAD_DLFT"
107 .It Fn pdc "PDC_CACHE" "PDC_CACHE_DFLT" "ptr"
108 Retrieve cache and TLB configuration parameters into the data area
112 The format of the data stores is as follows:
113 .Bl -column "0x00" -offset left
114 .It Sy "addr" Ta Sy "contents"
115 .It "0x00" Ta "I-cache size in bytes"
116 .It "0x04" Ta "I-cache configuration"
117 .It "0x08" Ta "I-cache base for flushing"
118 .It "0x0c" Ta "I-cache stride for flushing"
119 .It "0x10" Ta "I-cache count for flushing"
120 .It "0x14" Ta "I-cache loop size for flushing"
121 .It "0x18" Ta "D-cache size in bytes"
122 .It "0x1c" Ta "D-cache configuration"
123 .It "0x20" Ta "D-cache base for flushing"
124 .It "0x24" Ta "D-cache stride for flushing"
125 .It "0x28" Ta "D-cache count for flushing"
126 .It "0x2c" Ta "D-cache loop size for flushing"
127 .It "0x30" Ta "ITLB size"
128 .It "0x34" Ta "ITLB configuration"
129 .It "0x38" Ta "ITLB space base for flushing"
130 .It "0x3c" Ta "ITLB space stride for flushing"
131 .It "0x40" Ta "ITLB space count for flushing"
132 .It "0x44" Ta "ITLB address base for flushing"
133 .It "0x48" Ta "ITLB address stride for flushing"
134 .It "0x4c" Ta "ITLB address count for flushing"
135 .It "0x50" Ta "ITLB loop size for flushing"
136 .It "0x54" Ta "DTLB size"
137 .It "0x58" Ta "DTLB configuration"
138 .It "0x5c" Ta "DTLB space base for flushing"
139 .It "0x60" Ta "DTLB space stride for flushing"
140 .It "0x64" Ta "DTLB space count for flushing"
141 .It "0x68" Ta "DTLB address base for flushing"
142 .It "0x6c" Ta "DTLB address stride for flushing"
143 .It "0x70" Ta "DTLB address count for flushing"
144 .It "0x74" Ta "DTLB loop size for flushing"
147 The cache configuration word is formatted as follows:
148 .Bl -column "bit" "len" -offset left
149 .It Sy "bit" Ta Sy "len" Ta Sy "contents"
150 .It "0" Ta "12" Ta "reserved"
151 .It "13" Ta "3" Ta "set 1 if coherent operation supported"
152 .It "16" Ta "2" Ta "flush mode: 0 -- fdc \*[Am] fic; 1 -- fdc; 2 -- fic; 3 -- either"
153 .It "18" Ta "1" Ta "write-thru D-cache if set"
154 .It "19" Ta "2" Ta "reserved"
155 .It "21" Ta "3" Ta "cache line size"
156 .It "24" Ta "4" Ta "associativity"
157 .It "28" Ta "4" Ta "virtual address alias boundary"
160 .It Fn pdc "PDC_CACHE" "PDC_CACHE_SETCS" "ptr" "i_cst" "d_cst" "it_cst" "dt_cst"
161 The second word in each of the
167 arguments specifies the desired coherency operation for the instructions cache,
168 data cache, instructions TLB, and data TLB, respectively.
169 The data area pointed to by the
171 argument receives the actual coherent operation state
172 after an attempted change.
173 The CPU does not support the requested operation change
174 should the corresponding words not match the arguments upon return.
175 The currently supported values are zero for incoherent operation,
176 and one for coherent operation.
177 .It Fn pdc "PDC_CACHE" "PDC_CACHE_GETSPIDB" "ptr"
178 The word pointed to by the
180 argument receives a mask of space ID used in hashing for cache tag.
181 .It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_DISP" "display"
182 Update the chassis display with data given in the
185 The bitfields in the word are as follows:
187 .Bl -tag -width 0xfffff -compact
189 Specifies the system state.
190 .Bl -tag -width 0xfffff -compact
209 Blank the chassis display.
211 This and the other lower three nibbles specify the four hex digits
212 to be displayed on the chassis display.
214 .It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_WARN" "ptr"
215 Return the warnings from the chassis fans, temperature sensors,
216 batteries and power supplies.
217 A word of data is returned in the area pointed by the
219 argument and is described with bitfields:
221 .Bl -tag -width 0xff -compact
223 Zero means none of the redundant chassis components has indicated any failures.
224 A non-zero value specifies the failing component.
226 Indicates the chassis battery charge is low.
228 The chassis temperature has exceeded the low threshold.
230 The chassis temperature has exceeded the middle threshold.
232 .It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_ALL" "ptr" "display"
233 Both retrieves the chassis warnings into the word pointed by the
235 argument and sets the chassis display using data in the
238 .\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_DECONF" "ptr" "hpa"
239 .\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_RECONF" "ptr" "hpa"
240 .\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_INFO" "ptr" "hpa"
241 .It Fn pdc "PDC_COPROC" "PDC_COPROC_DFLT" "ptr"
242 Identify the coprocessors attached to the CPU.
245 points to a memory location where data is to be stored.
246 The first word provides a mask for functional coprocessors and
247 the second word is the mask for all present coprocessors.
248 .It Fn pdc "PDC_DEBUG" "PDC_DEBUG_DFLT" "ptr"
249 Retrieve address of the PDC debugger placed in to the word
253 .\" TODO .It Fn pdc "PDC_INSTR" "PDC_INSTR_DFLT"
254 .It Fn pdc "PDC_IODC" "PDC_IODC_READ" "ptr" "hpa" "entry" "addr" "count"
257 retrieve the specified
259 from the module's IODC into a memory area at
266 index is a one-byte index, with a value of zero being a special case.
267 For the 0th entry, an IODC header of 16 bytes is returned instead
269 .It Fn pdc "PDC_IODC" "PDC_IODC_NINIT" "ptr" "hpa" "spa"
270 Non-destructively initialize the memory module specified by the
274 arguments and return the module status after the init in the first word
277 argument, followed by the SPA space size and an amount of
278 available memory bytes in the subsequent two words.
279 .It Fn pdc "PDC_IODC" "PDC_IODC_DINIT" "ptr" "hpa" "spa"
282 except a destructive memory test is performed.
283 .It Fn pdc "PDC_IODC" "PDC_IODC_MEMERR" "ptr" "hpa" "spa"
284 For the memory module that is specified by
288 return the last most severe error information comprised of copies of
289 IO_STATUS, IO_ERR_RESP, IO_ERR_INFO, and IO_ERR_REQ registers placed
290 into the data area pointed to by the
292 argument, and clear the error status.
293 .It Fn pdc "PDC_IODC" "PDC_IODC_IMEMMASTER" "ptr" "hpa"
294 HPA for the primary memory module is returned in a word pointed to by the
296 argument for a memory module specified by
298 if it's configured as a slave module in an interleave group.
299 .It Fn pdc "PDC_LAN_STATION_ID" "PDC_LAN_STATION_ID_READ" "macptr" "hpa"
300 Retrieve the MAC address for the device at
302 into the data area pointed to by the
305 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_INFO" "ptr"
306 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_ADD" "ptr" "PDT"
307 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_CLR" "ptr"
308 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_READ" "ptr" "PDT"
309 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_RSTCLR" "ptr"
310 .\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_SETGOOD" "ptr" "good"
311 .It Fn pdc "PDC_MEMMAP" "PDC_MEMMAP_HPA." "ptr" "path"
312 Returns device HPA in the word pointed to by the
314 argument given the device
317 .It Fn pdc "PDC_MODEL" "PDC_MODEL_INFO" "ptr"
318 Returns the System model numbers.
319 .It Fn pdc "PDC_MODEL" "PDC_MODEL_BOOTID" "boot_id"
320 Set BOOT_ID of the processor module (used during boot
321 process of monarch selection) to a word given in the
324 .It Fn pdc "PDC_MODEL" "PDC_MODEL_COMP" "ptr" "index"
325 Retrieve processor component versions by issuing this procedure with
326 subsequent indexes in the
328 argument starting at zero.
329 The component version number is stored in the word pointed to by
333 .It Fn pdc "PDC_MODEL" "PDC_MODEL_MODEL" "ptr" "os_id" "mod_addr"
334 Return a string of 80 chars maximum stored at address
336 and conforming to the OS specified by the
340 for more information on OS ID).
343 address receives the result string length.
344 .\" TODO .It Fn pdc "PDC_MODEL" "PDC_MODEL_ENSPEC" "ptr"
345 .\" TODO .It Fn pdc "PDC_MODEL" "PDC_MODEL_DISPEC" "ptr"
346 .It Fn pdc "PDC_MODEL" "PDC_MODEL_CPUID" "ptr"
347 Retrieve CPU model information.
348 A word stored at the address given by the
350 argument specifies the CPU revision in the lower 5 bits followed by 7 bits
352 .It Fn pdc "PDC_MODEL" "PDC_MODEL_CPBALITIES" "ptr"
353 Retrieve platform capabilities into the word pointed by the
356 Bit 0 and 1 specify that a 64- or 32-bit OS is supported, respectively.
357 .It Fn pdc "PDC_MODEL" "PDC_MODEL_GETBOOTOPTS" "ptr"
358 Retrieve the currently enabled, overall supported, and enabled by default
359 boot test masks respectively stored at location pointed to by
363 .It Fn pdc "PDC_MODEL" "PDC_MODEL_SETBOOTOPTS" "ptr" "disable" "enable"
364 Disable boot tests specified by mask in the
367 boot tests specified by the mask given in the
370 The memory location pointed to by
372 will contain the resulting masks as returned
373 by the PDC_MODEL_GETBOOTOPTS function.
374 If an attempt is made to enable and disable the same test in one
375 call a PDC_ERR_INVAL will be returned.
376 .It Fn pdc "PDC_NVM" "PDC_NVM_READ" "offset" "ptr" "count"
377 Read contents of the NVM at
379 into the memory area pointed to by the
381 argument of no more than
385 The format of the NVM is as follows:
386 .Bl -column "0x0000" "size" "contents" -offset left
387 .It Sy "offset" Ta Sy "size" Ta Sy "contents"
388 .It "0x00" Ta "0x24" Ta "HV dependent"
389 .It "0x24" Ta "0x20" Ta "bootpath"
390 .It "0x44" Ta "0x04" Ta "ISL revision"
391 .It "0x48" Ta "0x04" Ta "timestamp"
392 .It "0x4c" Ta "0x30" Ta "LIF utility entries"
393 .It "0x7c" Ta "0x04" Ta "entry point"
394 .It "0x80" Ta "0x80" Ta "OS panic information"
396 .It Fn pdc "PDC_NVM" "PDC_NVM_WRITE" "offset" "ptr" "count"
397 Write data pointed to by the
404 .It Fn pdc "PDC_NVM" "PDC_NVM_SIZE" "ptr"
405 Put the size of Non-Volatile Memory into the word pointed to by the
408 .It Fn pdc "PDC_NVM" "PDC_NVM_VRFY"
409 Verify that the contents of NVM are valid.
410 .It Fn pdc "PDC_NVM" "PDC_NVM_INIT"
411 Reset the contents of NVM to zeroes without any arguments.
412 .It Fn pdc "PDC_HPA" "PDC_HPA_DFLT" "ptr"
413 The data returned provides the monarch CPUs HPA in the word pointed to by
415 .It Fn pdc "PDC_HPA" "PDC_HPA_MODULES" "ptr"
416 Retrieve the bit mask for devices on the CPU bus into the data location
419 The first word is a bitmask for devices 0-31, and the second is
420 a bitmask for devices 32-63, where bits set to one specify that
421 the corresponding device number is on the same bus as the CPU.
422 .\" TODO .It Fn pdc "PDC_PAT_IO" "PDC_PAT_IO_GET_PCI_RTSZ"
423 .\" TODO .It Fn pdc "PDC_PAT_IO" "PDC_PAT_IO_GET_PCI_RT"
424 .It Fn pdc "PDC_PIM" "PDC_PIM_HPMC" "offset" "ptr" "count"
427 in Processor Internal Memory (PIM) into a
429 memory area of no more than
432 Data provided includes (in the order it is copied into the buffer):
433 general registers (r0-r31), control registers (cr0-cr31), space
434 registers (sr0-sr7), IIA space tail, IIA offset tail, check type,
435 CPU state, cache check, TLB check, bus check, assist check, assist
436 state, path info, system responder address, system requestor address,
437 FPU registers (fpr0-fpr31).
438 .It Fn pdc "PDC_PIM" "PDC_PIM_SIZE" "ptr"
439 Return the amount of data available in bytes in the word pointed to by
441 .It Fn pdc "PDC_PIM" "PDC_PIM_LPMC" "offset" "ptr" "count"
446 memory area of no more than
449 Data provided includes: HV dependent 0x4a words, check type, HV dependent
450 word, cache check, TLB check, bus check, assist check, assist state,
451 path info, system responder address, system requestor address,
452 FPU registers (fpr0-fpr31).
453 .It Fn pdc "PDC_PIM" "PDC_PIM_SBD" "offset" "ptr" "count"
454 Get Soft Boot Data from
458 memory area of no more than
461 Data provided includes: general registers (r0-r31), control registers
462 (cr0-cr31), space registers (sr0-sr7), IIA space tail, IIA offset tail,
463 HV dependent word, CPU state.
464 .It Fn pdc "PDC_PIM" "PDC_PIM_TOC" "offset" "ptr" "count"
465 Get TOC (Transfer Of Control) data from
469 memory area of no more than
472 Data provided includes: general registers (r0-r31), control registers
473 (cr0-cr31), space registers (sr0-sr7), IIA space tail, IIA offset tail,
474 HV dependent word, CPU state.
475 .It Fn pdc "PDC_POW_FAIL" "PDC_POW_FAIL_DFLT"
476 Prepare for power fail.
477 On the machines that provide power failure interrupts, this function is
478 to be called after the operating system has completed
480 to finish system-dependent tasks and power down.
481 This function only requires 512 bytes of stack.
482 .It Fn pdc "PDC_PROC" "PDC_PROC_STOP"
483 Stop the currently executing processor and also disable bus requestorship,
484 disable interrupts, and exclude the processor from cache coherency protocols.
485 The caller must flush any necessary data from the cache before calling this
487 .It Fn pdc "PDC_PROC" "PDC_PROC_RENDEZVOUS"
488 Enter the reset rendezvous code on the current processor.
489 This function is only implemented on category B processors and
490 implementation is optional on category A processors.
491 .It Fn pdc "PDC_PSW" "PDC_PSW_GETMASK" "ptr"
492 Get the mask of default bits implemented into a word pointed to by the
495 The following mask values are possible:
497 .Bl -tag -width 100 -compact
499 Default endianness bit is available.
501 Default word width bit is available.
503 .It Fn pdc "PDC_PSW" "PDC_PSW_DEFAULTS" "ptr"
504 Retrieve the default PSW bits into the word pointed to by the
507 .It Fn pdc "PDC_PSW" "PDC_PSW_SETDEFAULTS" "bits"
510 .It Fn pdc "PDC_SOFT_POWER" "PDC_SOFT_POWER_INFO" "ptr"
513 register address into the word pointed to by the
518 register address being set specifies the power button being depressed.
519 No dampening is required, unlike with the
522 .It Fn pdc "PDC_SOFT_POWER" "PDC_SOFT_POWER_ENABLE" "ptr" "stat"
527 the soft power function,
528 where disable means the machine will turn immediately off
529 should the power get depressed.
532 argument still points to the data provided previously
533 by the PDC_SOFT_POWER_INFO call.
534 .It Fn pdc "PDC_STABLE" "PDC_STABLE_READ" "offset" "ptr" "count"
539 into the memory area pointed to by the
541 argument of no more than
545 The format of the stable storage is as follows:
546 .Bl -column "offset" "0x00" "contents" -offset left
547 .It Sy "offset" Ta Sy "size" Ta Sy "contents"
548 .It "0x0000" Ta "0x20" Ta "primary bootpath"
549 .It "0x0020" Ta "0x20" Ta "reserved"
550 .It "0x0040" Ta "0x02" Ta "OS ID"
551 .It "0x0042" Ta "0x16" Ta "OS dependent"
552 .It "0x0058" Ta "0x02" Ta "diagnostic"
553 .It "0x005a" Ta "0x03" Ta "reserved"
554 .It "0x005d" Ta "0x02" Ta "OS dependent"
555 .It "0x005f" Ta "0x01" Ta "fast size"
556 .It "0x0060" Ta "0x20" Ta "console path"
557 .It "0x0080" Ta "0x20" Ta "alternative boot path"
558 .It "0x00a0" Ta "0x20" Ta "keyboard path"
559 .It "0x00c0" Ta "0x20" Ta "reserved"
560 .It "0x00e0" Ta "size" Ta "OS dependent"
565 field may have the following values:
566 .Bl -column "value" "OS" -offset left
567 .It Sy "value" Ta Sy "OS"
568 .It "0x000" Ta "No OS-dependent info"
569 .It "0x001" Ta "HP-UX"
570 .It "0x002" Ta "MPE-iX"
572 .It "0x004" Ta "HP-RT"
573 .It "0x005" Ta "Novell Netware"
578 field is the amount of memory to be tested upon system boot
579 and is a power of two multiplier for 256KB.
580 Values of 0xe and 0xf are reserved.
581 .It Fn pdc "PDC_STABLE" "PDC_STABLE_WRITE" "address" "ptr" "count"
582 Write data pointed to by the
590 .It Fn pdc "PDC_STABLE" "PDC_STABLE_SIZE" "ptr"
593 into the word pointed to by the
596 .It Fn pdc "PDC_STABLE" "PDC_STABLE_VRFY" "ptr"
597 Verify that the contents of the
600 .It Fn pdc "PDC_STABLE" "PDC_STABLE_INIT" "ptr"
601 Reset the contents of the
604 .It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_FIND" "ptr" "path" "number"
607 into HPA and also provide an area size starting at HPA and a number of
608 additional addresses placed into the data area pointed to by the
610 argument words one, two, and three, respectively.
611 The device path is placed into the data area pointed to by the
614 .It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_ADDR" "ptr" "im" "ia"
615 Retrieve a list of additional addresses for the module number
617 for the address index
619 The result is placed into the data area pointed to by
621 where the first word gives the address and the second the size of the area.
622 .It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_HPA" "ptr" "path_ptr"
625 into device's HPA placed into a word pointed to by the
628 .It Fn pdc "PDC_TLB" "PDC_TLB_INFO" "ptr"
629 Retrieve the hardware TLB handler parameters.
630 This includes a minimal and maximal size for the page table, in bytes,
631 stored into words zero and one, respectively,
632 in the data area pointed to by the
635 .It Fn pdc "PDC_TLB" "PDC_TLB_CONFIG" "ptr" "base" "size" "param"
636 Configure the hardware TLB miss handler given the same parameters fetched
637 previously with PDC_TLB_INFO into data area pointed to by the
643 and handler parameters
645 The hardware TLB handler parameter bits are as follows:
647 .Bl -tag -width 0xff -compact
649 Enable the hardware TLB miss handler.
650 The default is to load cr28 with the faulted page table entry address.
652 Pointer to the next page table entry is put into cr28.
654 Next pointer field of the page table entry is put into cr28.
657 Resetting the page table address and/or size without disabling
658 the hardware TLB miss handler is allowed.
659 Any changes made are immediate upon Code or Data virtual
660 address translation bits are set in PSW.
661 .It Fn pdc "PDC_TOD" "PDC_TOD_READ" "ptr"
662 Read the TOD, which is a UNIX Epoch time, into the data area
666 That includes seconds in the first word and microseconds in
668 .It Fn pdc "PDC_TOD" "PDC_TOD_WRITE" "sec" "usec"
669 Write TOD with UNIX Epoch time with
674 .It Fn pdc "PDC_TOD" "PDC_TOD_ITIMER" "ptr"
675 Get TOD and CPU timer accuracy into the data location pointed to by the
678 The first two words specify a double floating-point value giving
680 The next two words provide accuracy in parts per billion for the TOD and
681 CPU timer, respectively.
684 .Bl -tag -width /sys/arch/hp700/dev/cpudevs -compact
686 C header file with relevant definitions.
687 .It /sys/arch/hp700/dev/cpudevs
688 System components' version numbers.
690 System console device.
693 Upon successful completion all procedures return zero.
694 The following error codes are returned in case of failures:
696 .Bl -tag -width PDC_ERR_NOPROC -compact
702 Unable to complete without error
715 .%T PA-RISC 1.1 Firmware Architecture Reference Specification
720 .%T PA-RISC 2.0 Firmware Architecture Reference Specification