~ubuntu-branches/ubuntu/quantal/linux-lowlatency/quantal-proposed

« back to all changes in this revision

Viewing changes to drivers/hv/channel_mgmt.c

  • Committer: Package Import Robot
  • Author(s): Andy Whitcroft, Andy Whitcroft
  • Date: 2012-06-21 09:16:38 UTC
  • Revision ID: package-import@ubuntu.com-20120621091638-gubhv4nox8xez1ct
Tags: 3.5.0-1.1
[ Andy Whitcroft]

* Rebuild lowlatency against Ubuntu-3.5.0-1.1
* All new configuration system to allow configuration deltas to be
  exposed via debian.lowlatency/config-delta

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
 *
47
47
 * @icmsghdrp is of type &struct icmsg_hdr.
48
48
 * @negop is of type &struct icmsg_negotiate.
49
 
 * Set up and fill in default negotiate response message. This response can
50
 
 * come from both the vmbus driver and the hv_utils driver. The current api
51
 
 * will respond properly to both Windows 2008 and Windows 2008-R2 operating
52
 
 * systems.
 
49
 * Set up and fill in default negotiate response message.
 
50
 *
 
51
 * The max_fw_version specifies the maximum framework version that
 
52
 * we can support and max _srv_version specifies the maximum service
 
53
 * version we can support. A special value MAX_SRV_VER can be
 
54
 * specified to indicate that we can handle the maximum version
 
55
 * exposed by the host.
53
56
 *
54
57
 * Mainly used by Hyper-V drivers.
55
58
 */
56
59
void vmbus_prep_negotiate_resp(struct icmsg_hdr *icmsghdrp,
57
 
                               struct icmsg_negotiate *negop, u8 *buf)
 
60
                                struct icmsg_negotiate *negop, u8 *buf,
 
61
                                int max_fw_version, int max_srv_version)
58
62
{
59
 
        if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) {
60
 
                icmsghdrp->icmsgsize = 0x10;
61
 
 
62
 
                negop = (struct icmsg_negotiate *)&buf[
63
 
                        sizeof(struct vmbuspipe_hdr) +
64
 
                        sizeof(struct icmsg_hdr)];
65
 
 
66
 
                if (negop->icframe_vercnt == 2 &&
67
 
                   negop->icversion_data[1].major == 3) {
68
 
                        negop->icversion_data[0].major = 3;
69
 
                        negop->icversion_data[0].minor = 0;
70
 
                        negop->icversion_data[1].major = 3;
71
 
                        negop->icversion_data[1].minor = 0;
72
 
                } else {
73
 
                        negop->icversion_data[0].major = 1;
74
 
                        negop->icversion_data[0].minor = 0;
75
 
                        negop->icversion_data[1].major = 1;
76
 
                        negop->icversion_data[1].minor = 0;
77
 
                }
78
 
 
79
 
                negop->icframe_vercnt = 1;
80
 
                negop->icmsg_vercnt = 1;
81
 
        }
 
63
        int icframe_vercnt;
 
64
        int icmsg_vercnt;
 
65
        int i;
 
66
 
 
67
        icmsghdrp->icmsgsize = 0x10;
 
68
 
 
69
        negop = (struct icmsg_negotiate *)&buf[
 
70
                sizeof(struct vmbuspipe_hdr) +
 
71
                sizeof(struct icmsg_hdr)];
 
72
 
 
73
        icframe_vercnt = negop->icframe_vercnt;
 
74
        icmsg_vercnt = negop->icmsg_vercnt;
 
75
 
 
76
        /*
 
77
         * Select the framework version number we will
 
78
         * support.
 
79
         */
 
80
 
 
81
        for (i = 0; i < negop->icframe_vercnt; i++) {
 
82
                if (negop->icversion_data[i].major <= max_fw_version)
 
83
                        icframe_vercnt = negop->icversion_data[i].major;
 
84
        }
 
85
 
 
86
        for (i = negop->icframe_vercnt;
 
87
                 (i < negop->icframe_vercnt + negop->icmsg_vercnt); i++) {
 
88
                if (negop->icversion_data[i].major <= max_srv_version)
 
89
                        icmsg_vercnt = negop->icversion_data[i].major;
 
90
        }
 
91
 
 
92
        /*
 
93
         * Respond with the maximum framework and service
 
94
         * version numbers we can support.
 
95
         */
 
96
        negop->icframe_vercnt = 1;
 
97
        negop->icmsg_vercnt = 1;
 
98
        negop->icversion_data[0].major = icframe_vercnt;
 
99
        negop->icversion_data[0].minor = 0;
 
100
        negop->icversion_data[1].major = icmsg_vercnt;
 
101
        negop->icversion_data[1].minor = 0;
82
102
}
 
103
 
83
104
EXPORT_SYMBOL_GPL(vmbus_prep_negotiate_resp);
84
105
 
85
106
/*