isp_library.c (317360) | isp_library.c (321870) |
---|---|
1/*- | 1/*- |
2 * Copyright (c) 2009-2017 Alexander Motin <mav@FreeBSD.org> |
|
2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright --- 20 unchanged lines hidden (view full) --- 30 */ 31#ifdef __NetBSD__ 32#include <sys/cdefs.h> 33__KERNEL_RCSID(0, "$NetBSD$"); 34#include <dev/ic/isp_netbsd.h> 35#endif 36#ifdef __FreeBSD__ 37#include <sys/cdefs.h> | 3 * Copyright (c) 1997-2009 by Matthew Jacob 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright --- 20 unchanged lines hidden (view full) --- 31 */ 32#ifdef __NetBSD__ 33#include <sys/cdefs.h> 34__KERNEL_RCSID(0, "$NetBSD$"); 35#include <dev/ic/isp_netbsd.h> 36#endif 37#ifdef __FreeBSD__ 38#include <sys/cdefs.h> |
38__FBSDID("$FreeBSD: stable/11/sys/dev/isp/isp_library.c 317360 2017-04-24 10:21:13Z mav $"); | 39__FBSDID("$FreeBSD: stable/11/sys/dev/isp/isp_library.c 321870 2017-08-01 13:03:06Z mav $"); |
39#include <dev/isp/isp_freebsd.h> 40#endif 41#ifdef __OpenBSD__ 42#include <dev/ic/isp_openbsd.h> 43#endif 44#ifdef __linux__ 45#include "isp_linux.h" 46#endif --- 1690 unchanged lines hidden (view full) --- 1737 ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1); 1738 ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd); 1739 ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2); 1740 ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3); 1741 ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type); 1742} 1743 1744void | 40#include <dev/isp/isp_freebsd.h> 41#endif 42#ifdef __OpenBSD__ 43#include <dev/ic/isp_openbsd.h> 44#endif 45#ifdef __linux__ 46#include "isp_linux.h" 47#endif --- 1690 unchanged lines hidden (view full) --- 1738 ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1); 1739 ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd); 1740 ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2); 1741 ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3); 1742 ISP_IOXPUT_32(isp, src->snscb_fc4_type, &dst->snscb_fc4_type); 1743} 1744 1745void |
1745isp_put_gxn_id_request(ispsoftc_t *isp, sns_gxn_id_req_t *src, sns_gxn_id_req_t *dst) | 1746isp_put_gid_pt_request(ispsoftc_t *isp, sns_gid_pt_req_t *src, sns_gid_pt_req_t *dst) |
1746{ 1747 ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen); 1748 ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0); 1749 ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]); 1750 ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]); 1751 ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]); 1752 ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]); 1753 ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen); 1754 ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1); 1755 ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd); | 1747{ 1748 ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen); 1749 ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0); 1750 ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]); 1751 ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]); 1752 ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]); 1753 ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]); 1754 ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen); 1755 ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1); 1756 ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd); |
1756 ISP_IOXPUT_16(isp, src->snscb_reserved2, &dst->snscb_reserved2); | 1757 ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2); |
1757 ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3); | 1758 ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3); |
1758 ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid); | 1759 ISP_IOXPUT_8(isp, src->snscb_port_type, &dst->snscb_port_type); 1760 ISP_IOXPUT_8(isp, src->snscb_domain, &dst->snscb_domain); 1761 ISP_IOXPUT_8(isp, src->snscb_area, &dst->snscb_area); 1762 ISP_IOXPUT_8(isp, src->snscb_flags, &dst->snscb_flags); |
1759} 1760 | 1763} 1764 |
1761/* 1762 * Generic SNS response - not particularly useful since the per-command data 1763 * isn't always 16 bit words. 1764 */ | |
1765void | 1765void |
1766isp_get_sns_response(ispsoftc_t *isp, sns_scrsp_t *src, sns_scrsp_t *dst, int nwords) | 1766isp_put_gxx_id_request(ispsoftc_t *isp, sns_gxx_id_req_t *src, sns_gxx_id_req_t *dst) |
1767{ | 1767{ |
1768 int i; 1769 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); 1770 ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type); 1771 for (i = 0; i < 3; i++) { 1772 ISP_IOXGET_8(isp, &src->snscb_port_id[i], 1773 dst->snscb_port_id[i]); 1774 } 1775 for (i = 0; i < 8; i++) { 1776 ISP_IOXGET_8(isp, &src->snscb_portname[i], 1777 dst->snscb_portname[i]); 1778 } 1779 for (i = 0; i < nwords; i++) { 1780 ISP_IOXGET_16(isp, &src->snscb_data[i], dst->snscb_data[i]); 1781 } | 1768 ISP_IOXPUT_16(isp, src->snscb_rblen, &dst->snscb_rblen); 1769 ISP_IOXPUT_16(isp, src->snscb_reserved0, &dst->snscb_reserved0); 1770 ISP_IOXPUT_16(isp, src->snscb_addr[0], &dst->snscb_addr[0]); 1771 ISP_IOXPUT_16(isp, src->snscb_addr[1], &dst->snscb_addr[1]); 1772 ISP_IOXPUT_16(isp, src->snscb_addr[2], &dst->snscb_addr[2]); 1773 ISP_IOXPUT_16(isp, src->snscb_addr[3], &dst->snscb_addr[3]); 1774 ISP_IOXPUT_16(isp, src->snscb_sblen, &dst->snscb_sblen); 1775 ISP_IOXPUT_16(isp, src->snscb_reserved1, &dst->snscb_reserved1); 1776 ISP_IOXPUT_16(isp, src->snscb_cmd, &dst->snscb_cmd); 1777 ISP_IOXPUT_16(isp, src->snscb_mword_div_2, &dst->snscb_mword_div_2); 1778 ISP_IOXPUT_32(isp, src->snscb_reserved3, &dst->snscb_reserved3); 1779 ISP_IOXPUT_32(isp, src->snscb_portid, &dst->snscb_portid); |
1782} 1783 1784void | 1780} 1781 1782void |
1785isp_get_gid_ft_response(ispsoftc_t *isp, sns_gid_ft_rsp_t *src, sns_gid_ft_rsp_t *dst, int nwords) | 1783isp_get_gid_xx_response(ispsoftc_t *isp, sns_gid_xx_rsp_t *src, sns_gid_xx_rsp_t *dst, int nwords) |
1786{ | 1784{ |
1787 int i; | 1785 int i, j; 1786 |
1788 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); 1789 for (i = 0; i < nwords; i++) { | 1787 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); 1788 for (i = 0; i < nwords; i++) { |
1790 int j; 1791 ISP_IOXGET_8(isp, &src->snscb_ports[i].control, dst->snscb_ports[i].control); | 1789 ISP_IOZGET_8(isp, &src->snscb_ports[i].control, 1790 dst->snscb_ports[i].control); |
1792 for (j = 0; j < 3; j++) { | 1791 for (j = 0; j < 3; j++) { |
1793 ISP_IOXGET_8(isp, &src->snscb_ports[i].portid[j], dst->snscb_ports[i].portid[j]); | 1792 ISP_IOZGET_8(isp, &src->snscb_ports[i].portid[j], 1793 dst->snscb_ports[i].portid[j]); |
1794 } | 1794 } |
1795 if (dst->snscb_ports[i].control & 0x80) { | 1795 if (dst->snscb_ports[i].control & 0x80) |
1796 break; | 1796 break; |
1797 } | |
1798 } 1799} 1800 1801void 1802isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src, sns_gxn_id_rsp_t *dst) 1803{ 1804 int i; | 1797 } 1798} 1799 1800void 1801isp_get_gxn_id_response(ispsoftc_t *isp, sns_gxn_id_rsp_t *src, sns_gxn_id_rsp_t *dst) 1802{ 1803 int i; |
1804 |
|
1805 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); | 1805 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); |
1806 for (i = 0; i < 8; i++) 1807 ISP_IOZGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]); 1808} 1809 1810void 1811isp_get_gft_id_response(ispsoftc_t *isp, sns_gft_id_rsp_t *src, sns_gft_id_rsp_t *dst) 1812{ 1813 int i; 1814 1815 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); |
|
1806 for (i = 0; i < 8; i++) { | 1816 for (i = 0; i < 8; i++) { |
1807 ISP_IOXGET_8(isp, &src->snscb_wwn[i], dst->snscb_wwn[i]); | 1817 ISP_IOZGET_32(isp, &src->snscb_fc4_types[i], 1818 dst->snscb_fc4_types[i]); |
1808 } 1809} 1810 1811void 1812isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src, sns_gff_id_rsp_t *dst) 1813{ 1814 int i; | 1819 } 1820} 1821 1822void 1823isp_get_gff_id_response(ispsoftc_t *isp, sns_gff_id_rsp_t *src, sns_gff_id_rsp_t *dst) 1824{ 1825 int i; |
1826 |
|
1815 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); 1816 for (i = 0; i < 32; i++) { | 1827 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); 1828 for (i = 0; i < 32; i++) { |
1817 ISP_IOXGET_32(isp, &src->snscb_fc4_features[i], dst->snscb_fc4_features[i]); | 1829 ISP_IOZGET_32(isp, &src->snscb_fc4_features[i], 1830 dst->snscb_fc4_features[i]); |
1818 } 1819} 1820 1821void 1822isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src, sns_ga_nxt_rsp_t *dst) 1823{ 1824 int i; 1825 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); | 1831 } 1832} 1833 1834void 1835isp_get_ga_nxt_response(ispsoftc_t *isp, sns_ga_nxt_rsp_t *src, sns_ga_nxt_rsp_t *dst) 1836{ 1837 int i; 1838 isp_get_ct_hdr(isp, &src->snscb_cthdr, &dst->snscb_cthdr); |
1826 ISP_IOXGET_8(isp, &src->snscb_port_type, dst->snscb_port_type); | 1839 ISP_IOZGET_8(isp, &src->snscb_port_type, dst->snscb_port_type); |
1827 for (i = 0; i < 3; i++) { | 1840 for (i = 0; i < 3; i++) { |
1828 ISP_IOXGET_8(isp, &src->snscb_port_id[i], dst->snscb_port_id[i]); | 1841 ISP_IOZGET_8(isp, &src->snscb_port_id[i], dst->snscb_port_id[i]); |
1829 } 1830 for (i = 0; i < 8; i++) { | 1842 } 1843 for (i = 0; i < 8; i++) { |
1831 ISP_IOXGET_8(isp, &src->snscb_portname[i], dst->snscb_portname[i]); | 1844 ISP_IOZGET_8(isp, &src->snscb_portname[i], dst->snscb_portname[i]); |
1832 } | 1845 } |
1833 ISP_IOXGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen); | 1846 ISP_IOZGET_8(isp, &src->snscb_pnlen, dst->snscb_pnlen); |
1834 for (i = 0; i < 255; i++) { | 1847 for (i = 0; i < 255; i++) { |
1835 ISP_IOXGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]); | 1848 ISP_IOZGET_8(isp, &src->snscb_pname[i], dst->snscb_pname[i]); |
1836 } 1837 for (i = 0; i < 8; i++) { | 1849 } 1850 for (i = 0; i < 8; i++) { |
1838 ISP_IOXGET_8(isp, &src->snscb_nodename[i], dst->snscb_nodename[i]); | 1851 ISP_IOZGET_8(isp, &src->snscb_nodename[i], dst->snscb_nodename[i]); |
1839 } | 1852 } |
1840 ISP_IOXGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen); | 1853 ISP_IOZGET_8(isp, &src->snscb_nnlen, dst->snscb_nnlen); |
1841 for (i = 0; i < 255; i++) { | 1854 for (i = 0; i < 255; i++) { |
1842 ISP_IOXGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]); | 1855 ISP_IOZGET_8(isp, &src->snscb_nname[i], dst->snscb_nname[i]); |
1843 } 1844 for (i = 0; i < 8; i++) { | 1856 } 1857 for (i = 0; i < 8; i++) { |
1845 ISP_IOXGET_8(isp, &src->snscb_ipassoc[i], dst->snscb_ipassoc[i]); | 1858 ISP_IOZGET_8(isp, &src->snscb_ipassoc[i], dst->snscb_ipassoc[i]); |
1846 } 1847 for (i = 0; i < 16; i++) { | 1859 } 1860 for (i = 0; i < 16; i++) { |
1848 ISP_IOXGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]); | 1861 ISP_IOZGET_8(isp, &src->snscb_ipaddr[i], dst->snscb_ipaddr[i]); |
1849 } 1850 for (i = 0; i < 4; i++) { | 1862 } 1863 for (i = 0; i < 4; i++) { |
1851 ISP_IOXGET_8(isp, &src->snscb_svc_class[i], dst->snscb_svc_class[i]); | 1864 ISP_IOZGET_8(isp, &src->snscb_svc_class[i], dst->snscb_svc_class[i]); |
1852 } 1853 for (i = 0; i < 32; i++) { | 1865 } 1866 for (i = 0; i < 32; i++) { |
1854 ISP_IOXGET_8(isp, &src->snscb_fc4_types[i], dst->snscb_fc4_types[i]); | 1867 ISP_IOZGET_8(isp, &src->snscb_fc4_types[i], dst->snscb_fc4_types[i]); |
1855 } 1856 for (i = 0; i < 8; i++) { | 1868 } 1869 for (i = 0; i < 8; i++) { |
1857 ISP_IOXGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]); | 1870 ISP_IOZGET_8(isp, &src->snscb_fpname[i], dst->snscb_fpname[i]); |
1858 } | 1871 } |
1859 ISP_IOXGET_8(isp, &src->snscb_reserved, dst->snscb_reserved); | 1872 ISP_IOZGET_8(isp, &src->snscb_reserved, dst->snscb_reserved); |
1860 for (i = 0; i < 3; i++) { | 1873 for (i = 0; i < 3; i++) { |
1861 ISP_IOXGET_8(isp, &src->snscb_hardaddr[i], dst->snscb_hardaddr[i]); | 1874 ISP_IOZGET_8(isp, &src->snscb_hardaddr[i], dst->snscb_hardaddr[i]); |
1862 } 1863} 1864 1865void 1866isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst) 1867{ 1868 int i; 1869 --- 1460 unchanged lines hidden --- | 1875 } 1876} 1877 1878void 1879isp_get_els(ispsoftc_t *isp, els_t *src, els_t *dst) 1880{ 1881 int i; 1882 --- 1460 unchanged lines hidden --- |