static ssize_t delta_bin_attr_read()

in platform/broadcom/sonic-platform-modules-delta/ag9064/modules/delta_ag9064_platform.c [958:1048]


static ssize_t delta_bin_attr_read(struct file *filp, struct kobject *kobj, struct bin_attribute *attr,
                                   char *buf, loff_t off, size_t count)
{
    struct delta_bin_attribute *delta_attr = to_delta_attr(attr);
    char attr_path[100];

    dni_klock();

    memset(buf, 0, count);
    switch(delta_attr->index) {
        case EEPROM_SFP_1:
        case EEPROM_SFP_2:
        case EEPROM_SFP_3:
        case EEPROM_SFP_4:
        case EEPROM_SFP_5:
        case EEPROM_SFP_6:
        case EEPROM_SFP_7:
        case EEPROM_SFP_8:
        case EEPROM_SFP_9:
        case EEPROM_SFP_10:
        case EEPROM_SFP_11:
        case EEPROM_SFP_12:
        case EEPROM_SFP_13:
        case EEPROM_SFP_14:
        case EEPROM_SFP_15:
        case EEPROM_SFP_16:
        case EEPROM_SFP_17:
        case EEPROM_SFP_18:
        case EEPROM_SFP_19:
        case EEPROM_SFP_20:
        case EEPROM_SFP_21:
        case EEPROM_SFP_22:
        case EEPROM_SFP_23:
        case EEPROM_SFP_24:
        case EEPROM_SFP_25:
        case EEPROM_SFP_26:
        case EEPROM_SFP_27:
        case EEPROM_SFP_28:
        case EEPROM_SFP_29:
        case EEPROM_SFP_30:
        case EEPROM_SFP_31:
        case EEPROM_SFP_32:
        case EEPROM_SFP_33:
        case EEPROM_SFP_34:
        case EEPROM_SFP_35:
        case EEPROM_SFP_36:
        case EEPROM_SFP_37:
        case EEPROM_SFP_38:
        case EEPROM_SFP_39:
        case EEPROM_SFP_40:
        case EEPROM_SFP_41:
        case EEPROM_SFP_42:
        case EEPROM_SFP_43:
        case EEPROM_SFP_44:
        case EEPROM_SFP_45:
        case EEPROM_SFP_46:
        case EEPROM_SFP_47:
        case EEPROM_SFP_48:
        case EEPROM_SFP_49:
        case EEPROM_SFP_50:
        case EEPROM_SFP_51:
        case EEPROM_SFP_52:
        case EEPROM_SFP_53:
        case EEPROM_SFP_54:
        case EEPROM_SFP_55:
        case EEPROM_SFP_56:
        case EEPROM_SFP_57:
        case EEPROM_SFP_58:
        case EEPROM_SFP_59:
        case EEPROM_SFP_60:
        case EEPROM_SFP_61:
        case EEPROM_SFP_62:
        case EEPROM_SFP_63:
        case EEPROM_SFP_64:
            sprintf(attr_path, "/sys/bus/i2c/devices/%d-0050/eeprom", delta_attr->index + EEPROM_MASK);
            if (access_user_space(attr_path, eeprom_data, EEPROM_SIZE, off, ATTR_R) < 0) {
                    goto ACCESS_ERROR;
            }
            count = (count <= EEPROM_SIZE) ? count : EEPROM_SIZE;
            memcpy(buf, eeprom_data + off, count);
            break;
        default:
            goto ACCESS_ERROR;
    }
    dni_kunlock();
    return count;

ACCESS_ERROR:
    dni_kunlock();
    return -ETIMEDOUT;
}