626int ata_pmode(struct ata_params *ap); 627int ata_wmode(struct ata_params *ap); 628int ata_umode(struct ata_params *ap); 629int ata_limit_mode(device_t dev, int mode, int maxmode); 630void ata_setmode(device_t dev); 631void ata_print_cable(device_t dev, u_int8_t *who); 632int ata_check_80pin(device_t dev, int mode); 633#ifdef ATA_CAM 634void ata_cam_begin_transaction(device_t dev, union ccb *ccb); 635void ata_cam_end_transaction(device_t dev, struct ata_request *request); 636#endif 637 638/* ata-queue.c: */ 639int ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, u_int64_t lba, u_int16_t count); 640int ata_atapicmd(device_t dev, u_int8_t *ccb, caddr_t data, int count, int flags, int timeout); 641void ata_queue_request(struct ata_request *request); 642void ata_start(device_t dev); 643void ata_finish(struct ata_request *request); 644void ata_timeout(struct ata_request *); 645void ata_catch_inflight(device_t dev); 646void ata_fail_requests(device_t dev); 647void ata_drop_requests(device_t dev); 648char *ata_cmd2str(struct ata_request *request); 649 650/* ata-lowlevel.c: */ 651void ata_generic_hw(device_t dev); 652int ata_begin_transaction(struct ata_request *); 653int ata_end_transaction(struct ata_request *); 654void ata_generic_reset(device_t dev); 655int ata_generic_command(struct ata_request *request); 656 657/* ata-dma.c: */ 658void ata_dmainit(device_t); 659void ata_dmafini(device_t dev); 660 661/* ata-sata.c: */ 662void ata_sata_phy_check_events(device_t dev); 663int ata_sata_scr_read(struct ata_channel *ch, int port, int reg, uint32_t *val); 664int ata_sata_scr_write(struct ata_channel *ch, int port, int reg, uint32_t val); 665int ata_sata_phy_reset(device_t dev, int port, int quick); 666int ata_sata_setmode(device_t dev, int target, int mode); 667int ata_sata_getrev(device_t dev, int target); 668int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis); 669void ata_pm_identify(device_t dev); 670 671/* macros for alloc/free of struct ata_request */ 672extern uma_zone_t ata_request_zone; 673#define ata_alloc_request() uma_zalloc(ata_request_zone, M_NOWAIT | M_ZERO) 674#define ata_free_request(request) { \ 675 if (!(request->flags & ATA_R_DANGER2)) \ 676 uma_zfree(ata_request_zone, request); \ 677 } 678 679/* macros for alloc/free of struct ata_composite */ 680extern uma_zone_t ata_composite_zone; 681#define ata_alloc_composite() uma_zalloc(ata_composite_zone, M_NOWAIT | M_ZERO) 682#define ata_free_composite(composite) uma_zfree(ata_composite_zone, composite) 683 684MALLOC_DECLARE(M_ATA); 685 686/* misc newbus defines */ 687#define GRANDPARENT(dev) device_get_parent(device_get_parent(dev)) 688 689/* macros to hide busspace uglyness */ 690#define ATA_INB(res, offset) \ 691 bus_read_1((res), (offset)) 692 693#define ATA_INW(res, offset) \ 694 bus_read_2((res), (offset)) 695#define ATA_INL(res, offset) \ 696 bus_read_4((res), (offset)) 697#define ATA_INSW(res, offset, addr, count) \ 698 bus_read_multi_2((res), (offset), (addr), (count)) 699#define ATA_INSW_STRM(res, offset, addr, count) \ 700 bus_read_multi_stream_2((res), (offset), (addr), (count)) 701#define ATA_INSL(res, offset, addr, count) \ 702 bus_read_multi_4((res), (offset), (addr), (count)) 703#define ATA_INSL_STRM(res, offset, addr, count) \ 704 bus_read_multi_stream_4((res), (offset), (addr), (count)) 705#define ATA_OUTB(res, offset, value) \ 706 bus_write_1((res), (offset), (value)) 707#define ATA_OUTW(res, offset, value) \ 708 bus_write_2((res), (offset), (value)) 709#define ATA_OUTL(res, offset, value) \ 710 bus_write_4((res), (offset), (value)) 711#define ATA_OUTSW(res, offset, addr, count) \ 712 bus_write_multi_2((res), (offset), (addr), (count)) 713#define ATA_OUTSW_STRM(res, offset, addr, count) \ 714 bus_write_multi_stream_2((res), (offset), (addr), (count)) 715#define ATA_OUTSL(res, offset, addr, count) \ 716 bus_write_multi_4((res), (offset), (addr), (count)) 717#define ATA_OUTSL_STRM(res, offset, addr, count) \ 718 bus_write_multi_stream_4((res), (offset), (addr), (count)) 719 720#define ATA_IDX_INB(ch, idx) \ 721 ATA_INB(ch->r_io[idx].res, ch->r_io[idx].offset) 722 723#define ATA_IDX_INW(ch, idx) \ 724 ATA_INW(ch->r_io[idx].res, ch->r_io[idx].offset) 725 726#define ATA_IDX_INL(ch, idx) \ 727 ATA_INL(ch->r_io[idx].res, ch->r_io[idx].offset) 728 729#define ATA_IDX_INSW(ch, idx, addr, count) \ 730 ATA_INSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 731 732#define ATA_IDX_INSW_STRM(ch, idx, addr, count) \ 733 ATA_INSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 734 735#define ATA_IDX_INSL(ch, idx, addr, count) \ 736 ATA_INSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 737 738#define ATA_IDX_INSL_STRM(ch, idx, addr, count) \ 739 ATA_INSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 740 741#define ATA_IDX_OUTB(ch, idx, value) \ 742 ATA_OUTB(ch->r_io[idx].res, ch->r_io[idx].offset, value) 743 744#define ATA_IDX_OUTW(ch, idx, value) \ 745 ATA_OUTW(ch->r_io[idx].res, ch->r_io[idx].offset, value) 746 747#define ATA_IDX_OUTL(ch, idx, value) \ 748 ATA_OUTL(ch->r_io[idx].res, ch->r_io[idx].offset, value) 749 750#define ATA_IDX_OUTSW(ch, idx, addr, count) \ 751 ATA_OUTSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 752 753#define ATA_IDX_OUTSW_STRM(ch, idx, addr, count) \ 754 ATA_OUTSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 755 756#define ATA_IDX_OUTSL(ch, idx, addr, count) \ 757 ATA_OUTSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 758 759#define ATA_IDX_OUTSL_STRM(ch, idx, addr, count) \ 760 ATA_OUTSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count)
| 626int ata_pmode(struct ata_params *ap); 627int ata_wmode(struct ata_params *ap); 628int ata_umode(struct ata_params *ap); 629int ata_limit_mode(device_t dev, int mode, int maxmode); 630void ata_setmode(device_t dev); 631void ata_print_cable(device_t dev, u_int8_t *who); 632int ata_check_80pin(device_t dev, int mode); 633#ifdef ATA_CAM 634void ata_cam_begin_transaction(device_t dev, union ccb *ccb); 635void ata_cam_end_transaction(device_t dev, struct ata_request *request); 636#endif 637 638/* ata-queue.c: */ 639int ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, u_int64_t lba, u_int16_t count); 640int ata_atapicmd(device_t dev, u_int8_t *ccb, caddr_t data, int count, int flags, int timeout); 641void ata_queue_request(struct ata_request *request); 642void ata_start(device_t dev); 643void ata_finish(struct ata_request *request); 644void ata_timeout(struct ata_request *); 645void ata_catch_inflight(device_t dev); 646void ata_fail_requests(device_t dev); 647void ata_drop_requests(device_t dev); 648char *ata_cmd2str(struct ata_request *request); 649 650/* ata-lowlevel.c: */ 651void ata_generic_hw(device_t dev); 652int ata_begin_transaction(struct ata_request *); 653int ata_end_transaction(struct ata_request *); 654void ata_generic_reset(device_t dev); 655int ata_generic_command(struct ata_request *request); 656 657/* ata-dma.c: */ 658void ata_dmainit(device_t); 659void ata_dmafini(device_t dev); 660 661/* ata-sata.c: */ 662void ata_sata_phy_check_events(device_t dev); 663int ata_sata_scr_read(struct ata_channel *ch, int port, int reg, uint32_t *val); 664int ata_sata_scr_write(struct ata_channel *ch, int port, int reg, uint32_t val); 665int ata_sata_phy_reset(device_t dev, int port, int quick); 666int ata_sata_setmode(device_t dev, int target, int mode); 667int ata_sata_getrev(device_t dev, int target); 668int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis); 669void ata_pm_identify(device_t dev); 670 671/* macros for alloc/free of struct ata_request */ 672extern uma_zone_t ata_request_zone; 673#define ata_alloc_request() uma_zalloc(ata_request_zone, M_NOWAIT | M_ZERO) 674#define ata_free_request(request) { \ 675 if (!(request->flags & ATA_R_DANGER2)) \ 676 uma_zfree(ata_request_zone, request); \ 677 } 678 679/* macros for alloc/free of struct ata_composite */ 680extern uma_zone_t ata_composite_zone; 681#define ata_alloc_composite() uma_zalloc(ata_composite_zone, M_NOWAIT | M_ZERO) 682#define ata_free_composite(composite) uma_zfree(ata_composite_zone, composite) 683 684MALLOC_DECLARE(M_ATA); 685 686/* misc newbus defines */ 687#define GRANDPARENT(dev) device_get_parent(device_get_parent(dev)) 688 689/* macros to hide busspace uglyness */ 690#define ATA_INB(res, offset) \ 691 bus_read_1((res), (offset)) 692 693#define ATA_INW(res, offset) \ 694 bus_read_2((res), (offset)) 695#define ATA_INL(res, offset) \ 696 bus_read_4((res), (offset)) 697#define ATA_INSW(res, offset, addr, count) \ 698 bus_read_multi_2((res), (offset), (addr), (count)) 699#define ATA_INSW_STRM(res, offset, addr, count) \ 700 bus_read_multi_stream_2((res), (offset), (addr), (count)) 701#define ATA_INSL(res, offset, addr, count) \ 702 bus_read_multi_4((res), (offset), (addr), (count)) 703#define ATA_INSL_STRM(res, offset, addr, count) \ 704 bus_read_multi_stream_4((res), (offset), (addr), (count)) 705#define ATA_OUTB(res, offset, value) \ 706 bus_write_1((res), (offset), (value)) 707#define ATA_OUTW(res, offset, value) \ 708 bus_write_2((res), (offset), (value)) 709#define ATA_OUTL(res, offset, value) \ 710 bus_write_4((res), (offset), (value)) 711#define ATA_OUTSW(res, offset, addr, count) \ 712 bus_write_multi_2((res), (offset), (addr), (count)) 713#define ATA_OUTSW_STRM(res, offset, addr, count) \ 714 bus_write_multi_stream_2((res), (offset), (addr), (count)) 715#define ATA_OUTSL(res, offset, addr, count) \ 716 bus_write_multi_4((res), (offset), (addr), (count)) 717#define ATA_OUTSL_STRM(res, offset, addr, count) \ 718 bus_write_multi_stream_4((res), (offset), (addr), (count)) 719 720#define ATA_IDX_INB(ch, idx) \ 721 ATA_INB(ch->r_io[idx].res, ch->r_io[idx].offset) 722 723#define ATA_IDX_INW(ch, idx) \ 724 ATA_INW(ch->r_io[idx].res, ch->r_io[idx].offset) 725 726#define ATA_IDX_INL(ch, idx) \ 727 ATA_INL(ch->r_io[idx].res, ch->r_io[idx].offset) 728 729#define ATA_IDX_INSW(ch, idx, addr, count) \ 730 ATA_INSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 731 732#define ATA_IDX_INSW_STRM(ch, idx, addr, count) \ 733 ATA_INSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 734 735#define ATA_IDX_INSL(ch, idx, addr, count) \ 736 ATA_INSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 737 738#define ATA_IDX_INSL_STRM(ch, idx, addr, count) \ 739 ATA_INSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 740 741#define ATA_IDX_OUTB(ch, idx, value) \ 742 ATA_OUTB(ch->r_io[idx].res, ch->r_io[idx].offset, value) 743 744#define ATA_IDX_OUTW(ch, idx, value) \ 745 ATA_OUTW(ch->r_io[idx].res, ch->r_io[idx].offset, value) 746 747#define ATA_IDX_OUTL(ch, idx, value) \ 748 ATA_OUTL(ch->r_io[idx].res, ch->r_io[idx].offset, value) 749 750#define ATA_IDX_OUTSW(ch, idx, addr, count) \ 751 ATA_OUTSW(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 752 753#define ATA_IDX_OUTSW_STRM(ch, idx, addr, count) \ 754 ATA_OUTSW_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 755 756#define ATA_IDX_OUTSL(ch, idx, addr, count) \ 757 ATA_OUTSL(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count) 758 759#define ATA_IDX_OUTSL_STRM(ch, idx, addr, count) \ 760 ATA_OUTSL_STRM(ch->r_io[idx].res, ch->r_io[idx].offset, addr, count)
|