Esempio n. 1
0
static int parse_busid(char *str, unsigned int *cssid, unsigned int *ssid,
               unsigned int *devno, int msgtrigger)
{
    char *str_work;
    int val, rc, ret;

    rc = 1;

    if (*str == '\0')
        goto out;

    /* old style */
    str_work = str;
    val = simple_strtoul(str, &str_work, 16);

    if (*str_work == '\0') {
        if (val <= __MAX_SUBCHANNEL) {
            *devno = val;
            *ssid = 0;
            *cssid = 0;
            rc = 0;
        }
        goto out;
    }

    /* new style */
    str_work = str;
    ret = pure_hex(&str_work, cssid, 1, 2, __MAX_CSSID);
    if (ret || (str_work[0] != '.'))
        goto out;
    str_work++;
    ret = pure_hex(&str_work, ssid, 1, 1, __MAX_SSID);
    if (ret || (str_work[0] != '.'))
        goto out;
    str_work++;
    ret = pure_hex(&str_work, devno, 4, 4, __MAX_SUBCHANNEL);
    if (ret || (str_work[0] != '\0'))
        goto out;

    rc = 0;
out:
    if (rc && msgtrigger)
        printk(KERN_WARNING "cio: Invalid cio_ignore device '%s'\n",
               str);

    return rc;
}
Esempio n. 2
0
static int parse_busid(char *str, unsigned int *cssid, unsigned int *ssid,
                       unsigned int *devno, int msgtrigger)
{
    char *str_work;
    int val, rc, ret;

    rc = 1;

    if (*str == '\0')
        goto out;

    /* old style */
    str_work = str;
    val = simple_strtoul(str, &str_work, 16);

    if (*str_work == '\0') {
        if (val <= __MAX_SUBCHANNEL) {
            *devno = val;
            *ssid = 0;
            *cssid = 0;
            rc = 0;
        }
        goto out;
    }

    /* new style */
    str_work = str;
    ret = pure_hex(&str_work, cssid, 1, 2, __MAX_CSSID);
    if (ret || (str_work[0] != '.'))
        goto out;
    str_work++;
    ret = pure_hex(&str_work, ssid, 1, 1, __MAX_SSID);
    if (ret || (str_work[0] != '.'))
        goto out;
    str_work++;
    ret = pure_hex(&str_work, devno, 4, 4, __MAX_SUBCHANNEL);
    if (ret || (str_work[0] != '\0'))
        goto out;

    rc = 0;
out:
    if (rc && msgtrigger)
        pr_warning("%s is not a valid device for the cio_ignore "
                   "kernel parameter\n", str);

    return rc;
}