linux/drivers/staging/lustre/include/linux/libcfs/libcfs.h
<<
>>
Prefs
   1/*
   2 * GPL HEADER START
   3 *
   4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 only,
   8 * as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13 * General Public License version 2 for more details (a copy is included
  14 * in the LICENSE file that accompanied this code).
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * version 2 along with this program; If not, see
  18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  19 *
  20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  21 * CA 95054 USA or visit www.sun.com if you need additional information or
  22 * have any questions.
  23 *
  24 * GPL HEADER END
  25 */
  26/*
  27 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
  28 * Use is subject to license terms.
  29 *
  30 * Copyright (c) 2011, 2012, Intel Corporation.
  31 */
  32/*
  33 * This file is part of Lustre, http://www.lustre.org/
  34 * Lustre is a trademark of Sun Microsystems, Inc.
  35 */
  36
  37#ifndef __LIBCFS_LIBCFS_H__
  38#define __LIBCFS_LIBCFS_H__
  39
  40#include "linux/libcfs.h"
  41#include <linux/gfp.h>
  42
  43#include "curproc.h"
  44
  45static inline int __is_po2(unsigned long long val)
  46{
  47        return !(val & (val - 1));
  48}
  49
  50#define IS_PO2(val) __is_po2((unsigned long long)(val))
  51
  52#define LOWEST_BIT_SET(x)       ((x) & ~((x) - 1))
  53
  54/*
  55 * Lustre Error Checksum: calculates checksum
  56 * of Hex number by XORing each bit.
  57 */
  58#define LERRCHKSUM(hexnum) (((hexnum) & 0xf) ^ ((hexnum) >> 4 & 0xf) ^ \
  59                           ((hexnum) >> 8 & 0xf))
  60
  61#define LUSTRE_SRV_LNET_PID      LUSTRE_LNET_PID
  62
  63#include <linux/list.h>
  64
  65int libcfs_arch_init(void);
  66void libcfs_arch_cleanup(void);
  67
  68/* need both kernel and user-land acceptor */
  69#define LNET_ACCEPTOR_MIN_RESERVED_PORT    512
  70#define LNET_ACCEPTOR_MAX_RESERVED_PORT    1023
  71
  72/*
  73 * libcfs pseudo device operations
  74 *
  75 * It's just draft now.
  76 */
  77
  78struct cfs_psdev_file {
  79        unsigned long   off;
  80        void        *private_data;
  81        unsigned long   reserved1;
  82        unsigned long   reserved2;
  83};
  84
  85struct cfs_psdev_ops {
  86        int (*p_open)(unsigned long, void *);
  87        int (*p_close)(unsigned long, void *);
  88        int (*p_read)(struct cfs_psdev_file *, char *, unsigned long);
  89        int (*p_write)(struct cfs_psdev_file *, char *, unsigned long);
  90        int (*p_ioctl)(struct cfs_psdev_file *, unsigned long, void *);
  91};
  92
  93/*
  94 * Drop into debugger, if possible. Implementation is provided by platform.
  95 */
  96
  97void cfs_enter_debugger(void);
  98
  99/*
 100 * Defined by platform
 101 */
 102int unshare_fs_struct(void);
 103sigset_t cfs_get_blocked_sigs(void);
 104sigset_t cfs_block_allsigs(void);
 105sigset_t cfs_block_sigs(unsigned long sigs);
 106sigset_t cfs_block_sigsinv(unsigned long sigs);
 107void cfs_restore_sigs(sigset_t);
 108int cfs_signal_pending(void);
 109void cfs_clear_sigpending(void);
 110
 111/*
 112 * Random number handling
 113 */
 114
 115/* returns a random 32-bit integer */
 116unsigned int cfs_rand(void);
 117/* seed the generator */
 118void cfs_srand(unsigned int, unsigned int);
 119void cfs_get_random_bytes(void *buf, int size);
 120
 121#include "libcfs_debug.h"
 122#include "libcfs_cpu.h"
 123#include "libcfs_private.h"
 124#include "libcfs_ioctl.h"
 125#include "libcfs_prim.h"
 126#include "libcfs_time.h"
 127#include "libcfs_string.h"
 128#include "libcfs_kernelcomm.h"
 129#include "libcfs_workitem.h"
 130#include "libcfs_hash.h"
 131#include "libcfs_fail.h"
 132#include "libcfs_crypto.h"
 133
 134/* container_of depends on "likely" which is defined in libcfs_private.h */
 135static inline void *__container_of(void *ptr, unsigned long shift)
 136{
 137        if (unlikely(IS_ERR(ptr) || ptr == NULL))
 138                return ptr;
 139        return (char *)ptr - shift;
 140}
 141
 142#define container_of0(ptr, type, member) \
 143        ((type *)__container_of((void *)(ptr), offsetof(type, member)))
 144
 145#define _LIBCFS_H
 146
 147void *libcfs_kvzalloc(size_t size, gfp_t flags);
 148void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size,
 149                          gfp_t flags);
 150
 151#endif /* _LIBCFS_H */
 152