1 /*- 2 * Copyright (c) 2015 M. Warner Losh <imp@freebsd.org> 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 * 1. Redistributions of source code must retain the above copyright 9 * notice unmodified, this list of conditions, and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * 26 * $FreeBSD$ 27 */ 28 29 #ifndef DEV_OW_OWN_H 30 #define DEV_OW_OWN_H 1 31 32 #include "own_if.h" 33 34 35 #define READ_ROM 0x33 36 #define MATCH_ROM 0x55 37 #define SKIP_ROM 0xcc 38 #define ALARM_SEARCH 0xec 39 #define SEARCH_ROM 0xf0 40 41 static inline int 42 own_send_command(device_t pdev, struct ow_cmd *cmd) 43 { 44 device_t ndev = device_get_parent(pdev); 45 46 return OWN_SEND_COMMAND(ndev, pdev, cmd); 47 } 48 49 /* 50 * How args for own_acquire_bus 51 */ 52 #define OWN_WAIT 1 53 #define OWN_DONTWAIT 2 54 55 static inline int 56 own_acquire_bus(device_t pdev, int how) 57 { 58 device_t ndev = device_get_parent(pdev); 59 60 return OWN_ACQUIRE_BUS(ndev, pdev, how); 61 } 62 63 static inline void 64 own_release_bus(device_t pdev) 65 { 66 device_t ndev = device_get_parent(pdev); 67 68 OWN_RELEASE_BUS(ndev, pdev); 69 } 70 71 static inline uint8_t 72 own_crc(device_t pdev, uint8_t *buffer, size_t len) 73 { 74 device_t ndev = device_get_parent(pdev); 75 76 return OWN_CRC(ndev, pdev, buffer, len); 77 } 78 79 static inline void 80 own_self_command(device_t pdev, struct ow_cmd *cmd, uint8_t xpt_cmd) 81 { 82 uint8_t *mep; 83 84 memset(cmd, 0, sizeof(*cmd)); 85 mep = ow_get_romid(pdev); 86 cmd->rom_cmd[0] = MATCH_ROM; 87 memcpy(&cmd->rom_cmd[1], mep, sizeof(romid_t)); 88 cmd->rom_len = 1 + sizeof(romid_t); 89 cmd->xpt_cmd[0] = xpt_cmd; 90 cmd->xpt_len = 1; 91 } 92 93 static inline int 94 own_command_wait(device_t pdev, struct ow_cmd *cmd) 95 { 96 int rv; 97 98 rv = own_acquire_bus(pdev, OWN_WAIT); 99 if (rv != 0) 100 return rv; 101 rv = own_send_command(pdev, cmd); 102 own_release_bus(pdev); 103 return rv; 104 } 105 106 #endif /* DEV_OW_OWLL_H */ 107