Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
.\" $NetBSD: pdc.4,v 1.4 2021/10/21 13:21:53 andvar Exp $
.\"
.\" $OpenBSD: pdc.4,v 1.6 2007/06/01 19:54:10 aanriot Exp $
.\"
.\" Copyright (c) 2004 Michael Shalayeff
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
.\" SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
.\" THE POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd February 17, 2017
.Dt PDC 4 hppa
.Os
.Sh NAME
.Nm pdc
.Nd Processor-Dependent Code firmware driver
.Sh SYNOPSIS
.Cd "pdc0 at mainbus?"
.Sh DESCRIPTION
The
.Nm
driver provides system console services through the PDC
and also a means for calling PDC procedures, described later.
The PDC console is used early in the kernel startup before enough kernel
subsystems have been initialized to directly use the hardware
i.e. serial ports, keyboard, and video.
.Pp
The PDC version displayed at system boot is relevant to the particular
system model and is not necessarily comparable to PDC versions
on other systems.
.\" TODO page0 description and entry points
.Sh PDC PROCEDURES
PDC procedure calls are all made through a single entry point
and assume normal C language calling conventions, with option
number in the first argument and the return data address in the
second, unless indicated otherwise.
Each call requires at most 7KB of the available stack.
Here is the list of procedures and options descriptions:
.Bl -tag -width pdc
.It Fn pdc "PDC_ADD_VALID" "PDC_ADD_VALID_DFLT" "paddr"
Perform a read operation attempt at the physical address
.Ar paddr
without causing a HPMC, in order to verify that the address is valid
and there is a device to respond to it.
The implementation may choose to call the caller's HPMC handler and
raise error conditions on the bus converters.
.It Fn pdc "PDC_ALLOC" "PDC_ALLOC_DFLT" "ptr" "size"
Allocate static storage for IODC use of
.Ar size
bytes and return the address in a word pointed to by the
.Ar ptr
argument.
There is no way of freeing the storage allocated and thus
care shall be taken to not exhaust the total allocation limit of 32KB.
.It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_DEFAULT" "ptr"
Get block TLB parameters into the data area pointed to by the
.Ar ptr
argument.
This includes minimal and maximal entry size and number of fixed and
variable sized entries in the block TLB.
Fixed entries have size of power of two and are aligned to the size
where variable entries can have any size and base address both
aligned to a page.
.It Fn pdc PDC_BLOCK_TLB PDC_BTLB_INSERT sp va pa len acc slot
Insert block TLB entry specified by the space ID
.Ar sp ,
virtual address
.Ar va ,
physical address
.Ar pa ,
region length
.Ar len ,
access rights
.Ar acc ,
into the slot number
.Ar slot .
.It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_PURGE" "sp" "va" "slot" "len"
Purge one entry from the block TLB specified by the space ID
.Ar sp ,
virtual address
.Ar va ,
region length
.Ar len ,
from slot number
.Ar slot .
.It Fn pdc "PDC_BLOCK_TLB" "PDC_BTLB_PURGE_ALL"
Purge all entries from the block TLB.
.\" TODO .It Fn pdc "PDC_BUS_BAD" "PDC_BUS_BAD_DLFT"
.It Fn pdc "PDC_CACHE" "PDC_CACHE_DFLT" "ptr"
Retrieve cache and TLB configuration parameters into the data area
pointed to by the
.Ar ptr
argument.
The format of the data stores is as follows:
.Bl -column "0x00" -offset left
.It Sy "addr" Ta Sy "contents"
.It "0x00" Ta "I-cache size in bytes"
.It "0x04" Ta "I-cache configuration"
.It "0x08" Ta "I-cache base for flushing"
.It "0x0c" Ta "I-cache stride for flushing"
.It "0x10" Ta "I-cache count for flushing"
.It "0x14" Ta "I-cache loop size for flushing"
.It "0x18" Ta "D-cache size in bytes"
.It "0x1c" Ta "D-cache configuration"
.It "0x20" Ta "D-cache base for flushing"
.It "0x24" Ta "D-cache stride for flushing"
.It "0x28" Ta "D-cache count for flushing"
.It "0x2c" Ta "D-cache loop size for flushing"
.It "0x30" Ta "ITLB size"
.It "0x34" Ta "ITLB configuration"
.It "0x38" Ta "ITLB space base for flushing"
.It "0x3c" Ta "ITLB space stride for flushing"
.It "0x40" Ta "ITLB space count for flushing"
.It "0x44" Ta "ITLB address base for flushing"
.It "0x48" Ta "ITLB address stride for flushing"
.It "0x4c" Ta "ITLB address count for flushing"
.It "0x50" Ta "ITLB loop size for flushing"
.It "0x54" Ta "DTLB size"
.It "0x58" Ta "DTLB configuration"
.It "0x5c" Ta "DTLB space base for flushing"
.It "0x60" Ta "DTLB space stride for flushing"
.It "0x64" Ta "DTLB space count for flushing"
.It "0x68" Ta "DTLB address base for flushing"
.It "0x6c" Ta "DTLB address stride for flushing"
.It "0x70" Ta "DTLB address count for flushing"
.It "0x74" Ta "DTLB loop size for flushing"
.El
.Pp
The cache configuration word is formatted as follows:
.Bl -column "bit" "len" -offset left
.It Sy "bit" Ta Sy "len" Ta Sy "contents"
.It "0" Ta "12" Ta "reserved"
.It "13" Ta "3" Ta "set 1 if coherent operation supported"
.It "16" Ta "2" Ta "flush mode: 0 -- fdc & fic; 1 -- fdc; 2 -- fic; 3 -- either"
.It "18" Ta "1" Ta "write-thru D-cache if set"
.It "19" Ta "2" Ta "reserved"
.It "21" Ta "3" Ta "cache line size"
.It "24" Ta "4" Ta "associativity"
.It "28" Ta "4" Ta "virtual address alias boundary"
.El
.Pp
.It Fn pdc "PDC_CACHE" "PDC_CACHE_SETCS" "ptr" "i_cst" "d_cst" "it_cst" "dt_cst"
The second word in each of the
.Ar i_cst ,
.Ar d_cst ,
.Ar it_cst ,
and
.Ar dt_cst
arguments specifies the desired coherency operation for the instructions cache,
data cache, instructions TLB, and data TLB, respectively.
The data area pointed to by the
.Ar ptr
argument receives the actual coherent operation state
after an attempted change.
The CPU does not support the requested operation change
should the corresponding words not match the arguments upon return.
The currently supported values are zero for incoherent operation,
and one for coherent operation.
.It Fn pdc "PDC_CACHE" "PDC_CACHE_GETSPIDB" "ptr"
The word pointed to by the
.Ar ptr
argument receives a mask of space ID used in hashing for cache tag.
.It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_DISP" "display"
Update the chassis display with data given in the
.Ar display
argument.
The bitfields in the word are as follows:
.Pp
.Bl -tag -width 0xfffff -compact
.It 0xe0000
Specifies the system state.
.Bl -tag -width 0xfffff -compact
.It 0x00000
off
.It 0x20000
fault
.It 0x40000
test
.It 0x60000
initialize
.It 0x80000
shutdown
.It 0xa0000
warning
.It 0xc0000
run
.It 0xe0000
all on
.El
.It 0x10000
Blank the chassis display.
.It 0x0f000
This and the other lower three nibbles specify the four hex digits
to be displayed on the chassis display.
.El
.It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_WARN" "ptr"
Return the warnings from the chassis fans, temperature sensors,
batteries and power supplies.
A word of data is returned in the area pointed by the
.Ar ptr
argument and is described with bitfields:
.Pp
.Bl -tag -width 0xff -compact
.It 0xff000000
Zero means none of the redundant chassis components has indicated any failures.
A non-zero value specifies the failing component.
.It 0x4
Indicates the chassis battery charge is low.
.It 0x2
The chassis temperature has exceeded the low threshold.
.It 0x1
The chassis temperature has exceeded the middle threshold.
.El
.It Fn pdc "PDC_CHASSIS" "PDC_CHASSIS_ALL" "ptr" "display"
Both retrieves the chassis warnings into the word pointed by the
.Ar ptr
argument and sets the chassis display using data in the
.Ar display
argument.
.\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_DECONF" "ptr" "hpa"
.\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_RECONF" "ptr" "hpa"
.\" TODO .It Fn pdc "PDC_CONF" "PDC_CONFIG_INFO" "ptr" "hpa"
.It Fn pdc "PDC_COPROC" "PDC_COPROC_DFLT" "ptr"
Identify the coprocessors attached to the CPU.
The
.Ar ptr
points to a memory location where data is to be stored.
The first word provides a mask for functional coprocessors and
the second word is the mask for all present coprocessors.
.It Fn pdc "PDC_DEBUG" "PDC_DEBUG_DFLT" "ptr"
Retrieve address of the PDC debugger placed in to the word
pointed to by the
.Ar ptr
argument.
.\" TODO .It Fn pdc "PDC_INSTR" "PDC_INSTR_DFLT"
.It Fn pdc "PDC_IODC" "PDC_IODC_READ" "ptr" "hpa" "entry" "addr" "count"
Given a module
.Ar hpa ,
retrieve the specified
.Ar entry
from the module's IODC into a memory area at
.Ar adr
of
.Ar count
bytes long at most.
The
.Ar entry
index is a one-byte index, with a value of zero being a special case.
For the 0th entry, an IODC header of 16 bytes is returned instead
of an actual code.
.It Fn pdc "PDC_IODC" "PDC_IODC_NINIT" "ptr" "hpa" "spa"
Non-destructively initialize the memory module specified by the
.Ar hpa
and
.Ar spa
arguments and return the module status after the init in the first word
pointed to by the
.Ar ptr
argument, followed by the SPA space size and an amount of
available memory bytes in the subsequent two words.
.It Fn pdc "PDC_IODC" "PDC_IODC_DINIT" "ptr" "hpa" "spa"
Same as
.Nm PDC_IODC_NINIT
except a destructive memory test is performed.
.It Fn pdc "PDC_IODC" "PDC_IODC_MEMERR" "ptr" "hpa" "spa"
For the memory module that is specified by
.Ar hpa
and
.Ar spa ,
return the last most severe error information comprised of copies of
IO_STATUS, IO_ERR_RESP, IO_ERR_INFO, and IO_ERR_REQ registers placed
into the data area pointed to by the
.Ar ptr
argument, and clear the error status.
.It Fn pdc "PDC_IODC" "PDC_IODC_IMEMMASTER" "ptr" "hpa"
HPA for the primary memory module is returned in a word pointed to by the
.Ar ptr
argument for a memory module specified by
.Ar hpa
if it's configured as a slave module in an interleave group.
.It Fn pdc "PDC_LAN_STATION_ID" "PDC_LAN_STATION_ID_READ" "macptr" "hpa"
Retrieve the MAC address for the device at
.Ar hpa
into the data area pointed to by the
.Ar macptr
argument.
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_INFO" "ptr"
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_ADD" "ptr" "PDT"
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_CLR" "ptr"
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_READ" "ptr" "PDT"
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_RSTCLR" "ptr"
.\" TODO .It Fn pdc "PDC_MEM" "PDC_MEM_SETGOOD" "ptr" "good"
.It Fn pdc "PDC_MEMMAP" "PDC_MEMMAP_HPA." "ptr" "path"
Returns device HPA in the word pointed to by the
.Ar ptr
argument given the device
.Ar path
pointer.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_INFO" "ptr"
Returns the System model numbers.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_BOOTID" "boot_id"
Set BOOT_ID of the processor module (used during boot
process of monarch selection) to a word given in the
.Ar boot_id
argument.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_COMP" "ptr" "index"
Retrieve processor component versions by issuing this procedure with
subsequent indexes in the
.Ar index
argument starting at zero.
The component version number is stored in the word pointed to by
the
.Ar ptr
argument.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_MODEL" "ptr" "os_id" "mod_addr"
Return a string of 80 chars maximum stored at address
.Ar mod_addr
and conforming to the OS specified by the
.Ar os_id
16-bit integer (see
.Nm PDC_STABLE
for more information on OS ID).
A word at the
.Ar ptr
address receives the result string length.
.\" TODO .It Fn pdc "PDC_MODEL" "PDC_MODEL_ENSPEC" "ptr"
.\" TODO .It Fn pdc "PDC_MODEL" "PDC_MODEL_DISPEC" "ptr"
.It Fn pdc "PDC_MODEL" "PDC_MODEL_CPUID" "ptr"
Retrieve CPU model information.
A word stored at the address given by the
.Ar ptr
argument specifies the CPU revision in the lower 5 bits followed by 7 bits
of CPU model number.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_CPBALITIES" "ptr"
Retrieve platform capabilities into the word pointed by the
.Ar ptr
argument.
Bit 0 and 1 specify that a 64- or 32-bit OS is supported, respectively.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_GETBOOTOPTS" "ptr"
Retrieve the currently enabled, overall supported, and enabled by default
boot test masks respectively stored at location pointed to by
the
.Ar ptr
argument.
.It Fn pdc "PDC_MODEL" "PDC_MODEL_SETBOOTOPTS" "ptr" "disable" "enable"
Disable boot tests specified by mask in the
.Ar disable
argument and enable
boot tests specified by the mask given in the
.Ar enable
argument.
The memory location pointed to by
.Ar ptr
will contain the resulting masks as returned
by the PDC_MODEL_GETBOOTOPTS function.
If an attempt is made to enable and disable the same test in one
call a PDC_ERR_INVAL will be returned.
.It Fn pdc "PDC_NVM" "PDC_NVM_READ" "offset" "ptr" "count"
Read contents of the NVM at
.Ar offset
into the memory area pointed to by the
.Ar ptr
argument of no more than
.Ar count
bytes.
.Pp
The format of the NVM is as follows:
.Bl -column "0x0000" "size" "contents" -offset left
.It Sy "offset" Ta Sy "size" Ta Sy "contents"
.It "0x00" Ta "0x24" Ta "HV dependent"
.It "0x24" Ta "0x20" Ta "bootpath"
.It "0x44" Ta "0x04" Ta "ISL revision"
.It "0x48" Ta "0x04" Ta "timestamp"
.It "0x4c" Ta "0x30" Ta "LIF utility entries"
.It "0x7c" Ta "0x04" Ta "entry point"
.It "0x80" Ta "0x80" Ta "OS panic information"
.El
.It Fn pdc "PDC_NVM" "PDC_NVM_WRITE" "offset" "ptr" "count"
Write data pointed to by the
.Ar ptr
argument of
.Ar count
bytes at
.Ar address
in the NVM.
.It Fn pdc "PDC_NVM" "PDC_NVM_SIZE" "ptr"
Put the size of Non-Volatile Memory into the word pointed to by the
.Ar ptr
argument.
.It Fn pdc "PDC_NVM" "PDC_NVM_VRFY"
Verify that the contents of NVM are valid.
.It Fn pdc "PDC_NVM" "PDC_NVM_INIT"
Reset the contents of NVM to zeroes without any arguments.
.It Fn pdc "PDC_HPA" "PDC_HPA_DFLT" "ptr"
The data returned provides the monarch CPUs HPA in the word pointed to by
.Ar ptr .
.It Fn pdc "PDC_HPA" "PDC_HPA_MODULES" "ptr"
Retrieve the bit mask for devices on the CPU bus into the data location
pointed to by
.Ar ptr .
The first word is a bitmask for devices 0-31, and the second is
a bitmask for devices 32-63, where bits set to one specify that
the corresponding device number is on the same bus as the CPU.
.\" TODO .It Fn pdc "PDC_PAT_IO" "PDC_PAT_IO_GET_PCI_RTSZ"
.\" TODO .It Fn pdc "PDC_PAT_IO" "PDC_PAT_IO_GET_PCI_RT"
.It Fn pdc "PDC_PIM" "PDC_PIM_HPMC" "offset" "ptr" "count"
Get HPMC data from
.Ar offset
in Processor Internal Memory (PIM) into a
.Ar ptr
memory area of no more than
.Ar count
bytes in size.
Data provided includes (in the order it is copied into the buffer):
general registers (r0-r31), control registers (cr0-cr31), space
registers (sr0-sr7), IIA space tail, IIA offset tail, check type,
CPU state, cache check, TLB check, bus check, assist check, assist
state, path info, system responder address, system requestor address,
FPU registers (fpr0-fpr31).
.It Fn pdc "PDC_PIM" "PDC_PIM_SIZE" "ptr"
Return the amount of data available in bytes in the word pointed to by
.Ar ptr .
.It Fn pdc "PDC_PIM" "PDC_PIM_LPMC" "offset" "ptr" "count"
Get LPMC data from
.Ar offset
in PIM into a
.Ar ptr
memory area of no more than
.Ar count
bytes in size.
Data provided includes: HV dependent 0x4a words, check type, HV dependent
word, cache check, TLB check, bus check, assist check, assist state,
path info, system responder address, system requestor address,
FPU registers (fpr0-fpr31).
.It Fn pdc "PDC_PIM" "PDC_PIM_SBD" "offset" "ptr" "count"
Get Soft Boot Data from
.Ar offset
in PIM into a
.Ar ptr
memory area of no more than
.Ar count
bytes in size.
Data provided includes: general registers (r0-r31), control registers
(cr0-cr31), space registers (sr0-sr7), IIA space tail, IIA offset tail,
HV dependent word, CPU state.
.It Fn pdc "PDC_PIM" "PDC_PIM_TOC" "offset" "ptr" "count"
Get TOC (Transfer Of Control) data from
.Ar offset
in PIM into a
.Ar ptr
memory area of no more than
.Ar count
bytes in size.
Data provided includes: general registers (r0-r31), control registers
(cr0-cr31), space registers (sr0-sr7), IIA space tail, IIA offset tail,
HV dependent word, CPU state.
.It Fn pdc "PDC_POW_FAIL" "PDC_POW_FAIL_DFLT"
Prepare for power fail.
On the machines that provide power failure interrupts, this function is
to be called after the operating system has completed
.Xr shutdown 8
to finish system-dependent tasks and power down.
This function only requires 512 bytes of stack.
.It Fn pdc "PDC_PROC" "PDC_PROC_STOP"
Stop the currently executing processor and also disable bus requestorship,
disable interrupts, and exclude the processor from cache coherency protocols.
The caller must flush any necessary data from the cache before calling this
function.
.It Fn pdc "PDC_PROC" "PDC_PROC_RENDEZVOUS"
Enter the reset rendezvous code on the current processor.
This function is only implemented on category B processors and
implementation is optional on category A processors.
.It Fn pdc "PDC_PSW" "PDC_PSW_GETMASK" "ptr"
Get the mask of default bits implemented into a word pointed to by the
.Ar ptr
argument.
The following mask values are possible:
.Pp
.Bl -tag -width 100 -compact
.It 1
Default endianness bit is available.
.It 2
Default word width bit is available.
.El
.It Fn pdc "PDC_PSW" "PDC_PSW_DEFAULTS" "ptr"
Retrieve the default PSW bits into the word pointed to by the
.Ar ptr
argument.
.It Fn pdc "PDC_PSW" "PDC_PSW_SETDEFAULTS" "bits"
Set the default PSW
.Ar bits .
.It Fn pdc "PDC_SOFT_POWER" "PDC_SOFT_POWER_INFO" "ptr"
Retrieve
.Dq power
register address into the word pointed to by the
.Ar ptr
argument.
Bit-0 in the
.Dq power
register address being set specifies the power button being depressed.
No dampening is required, unlike with the
.Xr hppa/lasi 4
power circuit.
.It Fn pdc "PDC_SOFT_POWER" "PDC_SOFT_POWER_ENABLE" "ptr" "stat"
Enable (zero
.Ar stat )
or disable (non-zero
.Ar stat )
the soft power function,
where disable means the machine will turn immediately off
should the power get depressed.
The
.Ar ptr
argument still points to the data provided previously
by the PDC_SOFT_POWER_INFO call.
.It Fn pdc "PDC_STABLE" "PDC_STABLE_READ" "offset" "ptr" "count"
Read contents of the
.Dq Stable Storage
at
.Ar offset
into the memory area pointed to by the
.Ar ptr
argument of no more than
.Ar count
bytes.
.Pp
The format of the stable storage is as follows:
.Bl -column "offset" "0x00" "contents" -offset left
.It Sy "offset" Ta Sy "size" Ta Sy "contents"
.It "0x0000" Ta "0x20" Ta "primary bootpath"
.It "0x0020" Ta "0x20" Ta "reserved"
.It "0x0040" Ta "0x02" Ta "OS ID"
.It "0x0042" Ta "0x16" Ta "OS dependent"
.It "0x0058" Ta "0x02" Ta "diagnostic"
.It "0x005a" Ta "0x03" Ta "reserved"
.It "0x005d" Ta "0x02" Ta "OS dependent"
.It "0x005f" Ta "0x01" Ta "fast size"
.It "0x0060" Ta "0x20" Ta "console path"
.It "0x0080" Ta "0x20" Ta "alternative boot path"
.It "0x00a0" Ta "0x20" Ta "keyboard path"
.It "0x00c0" Ta "0x20" Ta "reserved"
.It "0x00e0" Ta "size" Ta "OS dependent"
.El
.Pp
The
.Dq OS ID
field may have the following values:
.Bl -column "value" "OS" -offset left
.It Sy "value" Ta Sy "OS"
.It "0x000" Ta "No OS-dependent info"
.It "0x001" Ta "HP-UX"
.It "0x002" Ta "MPE-iX"
.It "0x003" Ta "OSF"
.It "0x004" Ta "HP-RT"
.It "0x005" Ta "Novell Netware"
.El
.Pp
The
.Dq fast size
field is the amount of memory to be tested upon system boot
and is a power of two multiplier for 256KB.
Values of 0xe and 0xf are reserved.
.It Fn pdc "PDC_STABLE" "PDC_STABLE_WRITE" "address" "ptr" "count"
Write data pointed to by the
.Ar ptr
argument of
.Ar count
bytes at
.Ar address
in the
.Dq Stable Storage .
.It Fn pdc "PDC_STABLE" "PDC_STABLE_SIZE" "ptr"
Put the size of the
.Dq Stable Storage
into the word pointed to by the
.Ar ptr
argument.
.It Fn pdc "PDC_STABLE" "PDC_STABLE_VRFY" "ptr"
Verify that the contents of the
.Dq Stable Storage
are valid.
.It Fn pdc "PDC_STABLE" "PDC_STABLE_INIT" "ptr"
Reset the contents of the
.Dq Stable Storage
to zeroes.
.It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_FIND" "ptr" "path" "number"
Map module
.Ar number
into HPA and also provide an area size starting at HPA and a number of
additional addresses placed into the data area pointed to by the
.Ar ptr
argument words one, two, and three, respectively.
The device path is placed into the data area pointed to by the
.Ar path
argument.
.It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_ADDR" "ptr" "im" "ia"
Retrieve a list of additional addresses for the module number
.Ar im
for the address index
.Ar ia .
The result is placed into the data area pointed to by
.Ar ptr ,
where the first word gives the address and the second the size of the area.
.It Fn pdc "PDC_SYSMAP" "PDC_SYSMAP_HPA" "ptr" "path_ptr"
Map device
.Ar path_ptr
into device's HPA placed into a word pointed to by the
.Ar ptr
argument.
.It Fn pdc "PDC_TLB" "PDC_TLB_INFO" "ptr"
Retrieve the hardware TLB handler parameters.
This includes a minimal and maximal size for the page table, in bytes,
stored into words zero and one, respectively,
in the data area pointed to by the
.Ar ptr
argument.
.It Fn pdc "PDC_TLB" "PDC_TLB_CONFIG" "ptr" "base" "size" "param"
Configure the hardware TLB miss handler given the same parameters fetched
previously with PDC_TLB_INFO into data area pointed to by the
.Ar ptr
and page table
.Ar base
address, page table
.Ar size ,
and handler parameters
.Ar param .
The hardware TLB handler parameter bits are as follows:
.Pp
.Bl -tag -width 0xff -compact
.It 1
Enable the hardware TLB miss handler.
The default is to load cr28 with the faulted page table entry address.
.It 4
Pointer to the next page table entry is put into cr28.
.It 6
Next pointer field of the page table entry is put into cr28.
.El
.Pp
Resetting the page table address and/or size without disabling
the hardware TLB miss handler is allowed.
Any changes made are immediate upon Code or Data virtual
address translation bits are set in PSW.
.It Fn pdc "PDC_TOD" "PDC_TOD_READ" "ptr"
Read the TOD, which is a UNIX Epoch time, into the data area
pointed to by the
.Ar ptr
argument.
That includes seconds in the first word and microseconds in
the second.
.It Fn pdc "PDC_TOD" "PDC_TOD_WRITE" "sec" "usec"
Write TOD with UNIX Epoch time with
.Ar sec
seconds and
.Ar usec
microseconds.
.It Fn pdc "PDC_TOD" "PDC_TOD_ITIMER" "ptr"
Get TOD and CPU timer accuracy into the data location pointed to by the
.Ar ptr
argument.
The first two words specify a double floating-point value giving
CPU timer frequency.
The next two words provide accuracy in parts per billion for the TOD and
CPU timer, respectively.
.El
.Sh FILES
.Bl -tag -width /sys/arch/hppa/dev/cpudevs -compact
.It machine/pdc.h
C header file with relevant definitions.
.It /sys/arch/hppa/dev/cpudevs
System components' version numbers.
.It /dev/console
System console device.
.El
.Sh DIAGNOSTICS
Upon successful completion all procedures return zero.
The following error codes are returned in case of failures:
.Pp
.Bl -tag -width PDC_ERR_NOPROC -compact
.It PDC_ERR_NOPROC
No such procedure
.It PDC_ERR_NOPT
No such option
.It PDC_ERR_COMPL
Unable to complete without error
.It PDC_ERR_EOD
No such device
.It PDC_ERR_INVAL
Invalid argument
.It PDC_ERR_PFAIL
Aborted by powerfail
.El
.Sh SEE ALSO
.Xr hppa/intro 4 ,
.Xr hppa/io 4 ,
.Xr hppa/lasi 4
.Rs
.%T PA-RISC 1.1 Firmware Architecture Reference Specification
.%A Hewlett-Packard
.%D March 8, 1999
.Re
.Rs
.%T PA-RISC 2.0 Firmware Architecture Reference Specification
.%A Hewlett-Packard
.%D March 7, 1999
.Re