// Copyright 2009 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
 *  System structs for Darwin, amd64
 */

typedef uint32 dev_t;
typedef uint64 ino_t;
typedef uint16 mode_t;
typedef uint16 nlink_t;
typedef uint32 uid_t;
typedef uint32 gid_t;
typedef int64 off_t;
typedef int32 blksize_t;
typedef int64 blkcnt_t;
typedef int64 time_t;

struct timespec {
	time_t tv_sec;
	int64 tv_nsec;
};

struct timeval {
	time_t tv_sec;
	int64 tv_usec;
};

struct stat {	// really a stat64
	dev_t st_dev;
	mode_t st_mode;
	nlink_t st_nlink;
	ino_t st_ino;
	uid_t st_uid;
	gid_t st_gid;
	dev_t st_rdev;
	struct timespec st_atimespec;
	struct timespec st_mtimespec;
	struct timespec st_ctimespec;
	struct timespec st_birthtimespec;
	off_t st_size;
	blkcnt_t st_blocks;
	blksize_t st_blksize;
	uint32 st_flags;
	uint32 st_gen;
 	int64 st_qspare[2];
};

#define	O_CREAT	0x0200

void bsdthread_create(void*, M*, G*, void(*)(void));
void bsdthread_register(void);


// Mach calls

typedef int32 kern_return_t;
typedef uint32 mach_port_t;

mach_port_t semcreate(void);
void semacquire(mach_port_t);
void semrelease(mach_port_t);
void semreset(mach_port_t);
void semdestroy(mach_port_t);
