|
|
|
|
|
|
|
#ifndef _MACROS_H
|
|
|
|
#define _MACROS_H
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Load a long integer into a register
|
|
|
|
*/
|
|
|
|
.macro liw reg, value
|
|
|
|
lis \reg, \value@h
|
|
|
|
ori \reg, \reg, \value@l
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Generate config_addr request
|
|
|
|
** This macro expects the values in registers:
|
|
|
|
** r3 - bus
|
|
|
|
** r4 - devfn
|
|
|
|
** r5 - offset
|
|
|
|
*/
|
|
|
|
.macro config_addr
|
|
|
|
rlwinm r9, r5, 24, 0, 6
|
|
|
|
rlwinm r8, r4, 16, 0, 31
|
|
|
|
rlwinm r7, r3, 8, 0, 31
|
|
|
|
or r9, r8, r9
|
|
|
|
or r9, r7, r9
|
|
|
|
ori r9, r9, 0x80
|
|
|
|
liw r10, 0xfec00cf8
|
|
|
|
stw r9, 0(r10)
|
|
|
|
eieio
|
|
|
|
sync
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Generate config_data address
|
|
|
|
*/
|
|
|
|
.macro config_data mask
|
|
|
|
andi. r9, r5, \mask
|
|
|
|
addi r9, r9, 0xcfc
|
|
|
|
oris r9, r9, 0xfee0
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Write a byte value to an output port
|
|
|
|
*/
|
|
|
|
.macro outb port, value
|
|
|
|
lis r2, 0xfe00
|
|
|
|
li r0, \value
|
|
|
|
stb r0, \port(r2)
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Write a register byte value to an output port
|
|
|
|
*/
|
|
|
|
.macro outbr port, value
|
|
|
|
lis r2, 0xfe00
|
|
|
|
stb \value, \port(r2)
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Read a byte value from a port into a specified register
|
|
|
|
*/
|
|
|
|
.macro inb reg, port
|
|
|
|
lis r2, 0xfe00
|
|
|
|
lbz \reg, \port(r2)
|
|
|
|
.endm
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
** Write a byte to the SuperIO config area
|
|
|
|
*/
|
|
|
|
.macro siowb offset, value
|
|
|
|
li r3, 0
|
|
|
|
li r4, (7<<3)
|
|
|
|
li r5, \offset
|
|
|
|
li r6, \value
|
|
|
|
bl pci_write_cfg_byte
|
|
|
|
.endm
|
|
|
|
|
|
|
|
#endif
|