diff options
Diffstat (limited to 'sys/dev/firewire')
-rw-r--r-- | sys/dev/firewire/firewire.h | 2 | ||||
-rw-r--r-- | sys/dev/firewire/fwohci.c | 17 |
2 files changed, 18 insertions, 1 deletions
diff --git a/sys/dev/firewire/firewire.h b/sys/dev/firewire/firewire.h index b5f6573..ca9cbac 100644 --- a/sys/dev/firewire/firewire.h +++ b/sys/dev/firewire/firewire.h @@ -381,6 +381,8 @@ struct fw_crom_buf { #define FWOHCI_RDREG _IOWR('S', 80, struct fw_reg_req_t) #define FWOHCI_WRREG _IOWR('S', 81, struct fw_reg_req_t) +#define FWOHCI_RDPHYREG _IOWR('S', 82, struct fw_reg_req_t) +#define FWOHCI_WRPHYREG _IOWR('S', 83, struct fw_reg_req_t) #define DUMPDMA _IOWR('S', 82, u_int32_t) diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c index 445dd66..ed2b3b5 100644 --- a/sys/dev/firewire/fwohci.c +++ b/sys/dev/firewire/fwohci.c @@ -332,7 +332,7 @@ again: } if (bootverbose || retry >= MAX_RETRY) device_printf(sc->fc.dev, - "fwphy_rddata: loop=%d, retry=%d\n", i, retry); + "fwphy_rddata: 0x%x loop=%d, retry=%d\n", addr, i, retry); #undef MAX_RETRY return((fun >> PHYDEV_RDDATA )& 0xff); } @@ -382,7 +382,22 @@ fwohci_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, fw_proc *td) err = EINVAL; } break; +/* Read/Write Phy registers */ +#define OHCI_MAX_PHY_REG 0xf + case FWOHCI_RDPHYREG: + if (reg->addr <= OHCI_MAX_PHY_REG) + reg->data = fwphy_rddata(fc, reg->addr); + else + err = EINVAL; + break; + case FWOHCI_WRPHYREG: + if (reg->addr <= OHCI_MAX_PHY_REG) + reg->data = fwphy_wrdata(fc, reg->addr, reg->data); + else + err = EINVAL; + break; default: + err = EINVAL; break; } return err; |