s390/cio: Add new Operation Code OC3 to PNSO
[linux-2.6-microblaze.git] / drivers / s390 / cio / chsc.c
index c314e94..8f764a2 100644 (file)
@@ -65,6 +65,8 @@ int chsc_error_from_response(int response)
        case 0x0100:
        case 0x0102:
                return -ENOMEM;
+       case 0x0108:            /* "HW limit exceeded" for the op 0x003d */
+               return -EUSERS;
        default:
                return -EIO;
        }
@@ -1340,6 +1342,7 @@ EXPORT_SYMBOL_GPL(chsc_scm_info);
  * chsc_pnso() - Perform Network-Subchannel Operation
  * @schid:             id of the subchannel on which PNSO is performed
  * @pnso_area:         request and response block for the operation
+ * @oc:                        Operation Code
  * @resume_token:      resume token for multiblock response
  * @cnc:               Boolean change-notification control
  *
@@ -1347,10 +1350,8 @@ EXPORT_SYMBOL_GPL(chsc_scm_info);
  *
  * Returns 0 on success.
  */
-int chsc_pnso(struct subchannel_id schid,
-             struct chsc_pnso_area *pnso_area,
-             struct chsc_pnso_resume_token resume_token,
-             int cnc)
+int chsc_pnso(struct subchannel_id schid, struct chsc_pnso_area *pnso_area,
+             u8 oc, struct chsc_pnso_resume_token resume_token, int cnc)
 {
        memset(pnso_area, 0, sizeof(*pnso_area));
        pnso_area->request.length = 0x0030;
@@ -1359,7 +1360,7 @@ int chsc_pnso(struct subchannel_id schid,
        pnso_area->ssid  = schid.ssid;
        pnso_area->sch   = schid.sch_no;
        pnso_area->cssid = schid.cssid;
-       pnso_area->oc    = 0; /* Store-network-bridging-information list */
+       pnso_area->oc    = oc;
        pnso_area->resume_token = resume_token;
        pnso_area->n       = (cnc != 0);
        if (chsc(pnso_area))