Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 1 | /* |
| 2 | * |
| 3 | * Copyright (c) 2009, Microsoft Corporation. |
| 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | * under the terms and conditions of the GNU General Public License, |
| 7 | * version 2, as published by the Free Software Foundation. |
| 8 | * |
| 9 | * This program is distributed in the hope it will be useful, but WITHOUT |
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| 12 | * more details. |
| 13 | * |
| 14 | * You should have received a copy of the GNU General Public License along with |
| 15 | * this program; if not, write to the Free Software Foundation, Inc., 59 Temple |
| 16 | * Place - Suite 330, Boston, MA 02111-1307 USA. |
| 17 | * |
| 18 | * Authors: |
| 19 | * Haiyang Zhang <haiyangz@microsoft.com> |
| 20 | * Hank Janssen <hjanssen@microsoft.com> |
| 21 | * |
| 22 | */ |
| 23 | |
| 24 | |
| 25 | #ifndef _VMBUS_H_ |
| 26 | #define _VMBUS_H_ |
| 27 | |
| 28 | #include <linux/device.h> |
| 29 | |
Greg Kroah-Hartman | 870cde8 | 2009-08-19 16:21:28 -0700 | [diff] [blame] | 30 | #include "include/VmbusApi.h" |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 31 | |
Nicolas Palix | 775ef25 | 2009-07-29 14:09:45 +0200 | [diff] [blame] | 32 | typedef int (*PFN_DRIVERINITIALIZE)(struct hv_driver *drv); |
| 33 | typedef int (*PFN_DRIVEREXIT)(struct hv_driver *drv); |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 34 | |
| 35 | struct driver_context { |
Greg Kroah-Hartman | caf26a3 | 2009-08-19 16:17:03 -0700 | [diff] [blame] | 36 | struct hv_guid class_id; |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 37 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 38 | struct device_driver driver; |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 39 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 40 | /* |
| 41 | * Use these methods instead of the struct device_driver so 2.6 kernel |
| 42 | * stops complaining |
| 43 | * TODO - fix this! |
| 44 | */ |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 45 | int (*probe)(struct device *); |
| 46 | int (*remove)(struct device *); |
| 47 | void (*shutdown)(struct device *); |
| 48 | }; |
| 49 | |
| 50 | struct device_context { |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 51 | struct work_struct probe_failed_work_item; |
Greg Kroah-Hartman | caf26a3 | 2009-08-19 16:17:03 -0700 | [diff] [blame] | 52 | struct hv_guid class_id; |
| 53 | struct hv_guid device_id; |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 54 | int probe_error; |
| 55 | struct device device; |
Nicolas Palix | 3d3b551 | 2009-07-28 17:32:53 +0200 | [diff] [blame] | 56 | struct hv_device device_obj; |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 57 | }; |
| 58 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 59 | static inline struct device_context *to_device_context(struct hv_device *d) |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 60 | { |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 61 | return container_of(d, struct device_context, device_obj); |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 62 | } |
| 63 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 64 | static inline struct device_context *device_to_device_context(struct device *d) |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 65 | { |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 66 | return container_of(d, struct device_context, device); |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 67 | } |
| 68 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 69 | static inline struct driver_context *driver_to_driver_context(struct device_driver *d) |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 70 | { |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 71 | return container_of(d, struct driver_context, driver); |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 72 | } |
| 73 | |
Bill Pemberton | 454f18a | 2009-07-27 16:47:24 -0400 | [diff] [blame] | 74 | |
| 75 | /* Vmbus interface */ |
| 76 | |
Greg Kroah-Hartman | 0897865 | 2009-08-19 16:23:45 -0700 | [diff] [blame] | 77 | int vmbus_child_driver_register(struct driver_context *driver_ctx); |
| 78 | void vmbus_child_driver_unregister(struct driver_context *driver_ctx); |
Greg Kroah-Hartman | ee3d7dd | 2009-08-20 12:17:36 -0700 | [diff] [blame^] | 79 | void vmbus_get_interface(struct vmbus_channel_interface *interface); |
Hank Janssen | ab05778 | 2009-07-13 15:19:28 -0700 | [diff] [blame] | 80 | |
Bill Pemberton | 454f18a | 2009-07-27 16:47:24 -0400 | [diff] [blame] | 81 | #endif /* _VMBUS_H_ */ |