static ssize_t broadcast_show(struct device *dev, struct device_attribute *attr, char *buf) { struct net_device *ndev = to_net_dev(dev); if (dev_isalive(ndev)) return sysfs_format_mac(buf, ndev->broadcast, ndev->addr_len); return -EINVAL; }
/* use same locking rules as GIFHWADDR ioctl's */ static ssize_t address_show(struct device *dev, struct device_attribute *attr, char *buf) { struct net_device *ndev = to_net_dev(dev); ssize_t ret = -EINVAL; read_lock(&dev_base_lock); if (dev_isalive(ndev)) ret = sysfs_format_mac(buf, ndev->dev_addr, ndev->addr_len); read_unlock(&dev_base_lock); return ret; }
int beiscsi_get_macaddr(char *buf, struct beiscsi_hba *phba) { struct be_cmd_resp_get_mac_addr *resp; struct be_mcc_wrb *wrb; unsigned int tag, wrb_num; unsigned short status, extd_status; struct be_queue_info *mccq = &phba->ctrl.mcc_obj.q; int rc; if (phba->read_mac_address) return sysfs_format_mac(buf, phba->mac_address, ETH_ALEN); tag = be_cmd_get_mac_addr(phba); if (!tag) { SE_DEBUG(DBG_LVL_1, "be_cmd_get_mac_addr Failed\n"); return -EBUSY; } else wait_event_interruptible(phba->ctrl.mcc_wait[tag], phba->ctrl.mcc_numtag[tag]); wrb_num = (phba->ctrl.mcc_numtag[tag] & 0x00FF0000) >> 16; extd_status = (phba->ctrl.mcc_numtag[tag] & 0x0000FF00) >> 8; status = phba->ctrl.mcc_numtag[tag] & 0x000000FF; if (status || extd_status) { SE_DEBUG(DBG_LVL_1, "Failed to get be_cmd_get_mac_addr" " status = %d extd_status = %d\n", status, extd_status); free_mcc_tag(&phba->ctrl, tag); return -EAGAIN; } wrb = queue_get_wrb(mccq, wrb_num); free_mcc_tag(&phba->ctrl, tag); resp = embedded_payload(wrb); memcpy(phba->mac_address, resp->mac_address, ETH_ALEN); rc = sysfs_format_mac(buf, phba->mac_address, ETH_ALEN); phba->read_mac_address = 1; return rc; }