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 _OSD_H_ 26#define _OSD_H_ 27 28#include <linux/workqueue.h> 29 30/* Defines */ 31#define ALIGN_UP(value, align) (((value) & (align-1)) ? \ 32 (((value) + (align-1)) & ~(align-1)) : \ 33 (value)) 34#define ALIGN_DOWN(value, align) ((value) & ~(align-1)) 35#define NUM_PAGES_SPANNED(addr, len) ((ALIGN_UP(addr+len, PAGE_SIZE) - \ 36 ALIGN_DOWN(addr, PAGE_SIZE)) >> \ 37 PAGE_SHIFT) 38 39#define LOWORD(dw) ((unsigned short)(dw)) 40#define HIWORD(dw) ((unsigned short)(((unsigned int) (dw) >> 16) & 0xFFFF)) 41 42struct hv_guid { 43 unsigned char data[16]; 44}; 45 46struct osd_waitevent { 47 int condition; 48 wait_queue_head_t event; 49}; 50 51/* Osd routines */ 52 53extern void *osd_VirtualAllocExec(unsigned int size); 54 55extern void *osd_PageAlloc(unsigned int count); 56extern void osd_PageFree(void *page, unsigned int count); 57 58extern struct osd_waitevent *osd_WaitEventCreate(void); 59extern void osd_WaitEventSet(struct osd_waitevent *waitEvent); 60extern int osd_WaitEventWait(struct osd_waitevent *waitEvent); 61 62/* If >0, waitEvent got signaled. If ==0, timeout. If < 0, error */ 63extern int osd_WaitEventWaitEx(struct osd_waitevent *waitEvent, 64 u32 TimeoutInMs); 65 66int osd_schedule_callback(struct workqueue_struct *wq, 67 void (*func)(void *), 68 void *data); 69 70#endif /* _OSD_H_ */ 71